gpt4 book ai didi

c++ - 子类化 QCompleter,我的子类中的虚拟插槽未被调用

转载 作者:行者123 更新时间:2023-11-30 03:06:03 24 4
gpt4 key购买 nike

我正在对 QCompleter 进行子类化,以赋予它一些特殊功能。我希望在模型中只有一个具有给定前缀的完成时触发 activated(),但这不是我遇到问题的地方。

我在我的子类中创建了一个虚拟 setCompleterPrefix(),但编译器似乎没有注意到它。相反,当用户输入前缀时,将调用基本 QCompleter::setCompletionPrefix() 。我做错了什么吗?

这是我的类(class):

#ifndef INSTANTCOMPLETER_H
#define INSTANTCOMPLETER_H

#include <QCompleter>

namespace Reliant
{
class InstantCompleter : public QCompleter
{
Q_OBJECT
public:
explicit InstantCompleter(QObject* parent = 0);

private:

signals:

public slots:
virtual void setCompletionPrefix(const QString &prefix);

};
}

#endif // INSTANTCOMPLETER_H

定义:

#include "instantcompleter.h"
using Reliant::InstantCompleter;

InstantCompleter::InstantCompleter(QObject* parent) :
QCompleter(parent)
{
}

void InstantCompleter::setCompletionPrefix(const QString &prefix)
{
int completionCount = this->completionCount();
if(completionCount == 1 && setCurrentRow(0))
emit activated(currentCompletion());
else
QCompleter::setCompletionPrefix(prefix);
}

最佳答案

您可以使用 QCompleter::completionModel() 返回的模型及其信号来跟踪完成计数:

InstantCompleter::InstantCompleter(QObject* parent) :
QCompleter(parent)
{
connect(completionModel(), SIGNAL(layoutChanged()), SLOT(completionModelChanged()));
}

// declared in the "private slots:" section
void InstantCompleter::completionModelChanged()
{
if (completionCount() == 1 && setCurrentRow(0))
emit activated(currentCompletion());
}

关于c++ - 子类化 QCompleter,我的子类中的虚拟插槽未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7071106/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com