关于QLineEdit,我可以在运行时更改完成程序吗?

时间:2014-09-06 09:06:50

标签: c++ qt autocomplete

对于这个项目,我使用自定义的完成文件,不仅在stringlist的开头,而且从stringlist的字符串中的任何地方完成文本。例如:如果stringlist包含" Ann,Arial,Bass,Fra,John ",则键入字母' A'默认只提供" A nn "和" A rial "。使用这个定制的完成者,键入字母' A'还会给" B a ss "和" Fr a "。

可以在mycompleter.cppmycompleter.h找到完整的代码。

在项目期间,这一直很好。我在启动时从数据库加载wordlist并从那里开始工作。

现在,我的问题如下:由于项目现在需要新功能,因此可以在运行时更改包含wordlist的数据库。这意味着,在进行更改后,我应该为完成者重新加载wordlist。

目前,程序开始崩溃。不是每次都有,但有时候'。我不能完全重现崩溃。我只是继续尝试改变数据库(从完成者那里调用“重新加载”),并且由于一些调试,我发现它崩溃了,有时候'在第5行QObject::disconnect(c, 0, this, 0);

任何人都可以对此有所了解吗?我做错了什么吗?因为我不能重现崩溃的每一个'时间,我对此很困惑,非常欢迎任何帮助。

代码是:

void MyLineEdit::setCompleter(MyCompleter *completer)
{
    if (c)
    {
        QObject::disconnect(c, 0, this, 0);
    }

    c = completer;

    if (!c)
    {
        return;
    }

    c->setWidget(this);
    connect(completer, SIGNAL(activated(const QString&)), this, SLOT(insertCompletion(const QString&)));
}

0 个答案:

没有答案