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