Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 关于QLineEdit,我可以在运行时更改完成符吗?_C++_Qt_Autocomplete - Fatal编程技术网

C++ 关于QLineEdit,我可以在运行时更改完成符吗?

C++ 关于QLineEdit,我可以在运行时更改完成符吗?,c++,qt,autocomplete,C++,Qt,Autocomplete,对于这个项目,我使用一个定制的完成器来完成文本,不仅在stringlist的开头,而且在stringlist的字符串中的任何地方。例如:如果stringlist包含“Ann、Arial、Bass、Fra、John”,则键入字母“A”将默认仅给出“Ann”和“Arial”。使用此自定义的补全符,键入字母“A”也将给出“BAss”和“FrA” 此完整代码可在和中找到 在项目期间,这项技术一直运作良好。我在启动时从数据库加载单词列表,然后从那里开始工作 现在,我的问题是:由于项目现在需要一个新的功能,

对于这个项目,我使用一个定制的完成器来完成文本,不仅在stringlist的开头,而且在stringlist的字符串中的任何地方。例如:如果stringlist包含“Ann、Arial、Bass、Fra、John”,则键入字母“A”将默认仅给出“Ann”和“Arial”。使用此自定义的补全符,键入字母“A”也将给出“BAss”和“FrA

此完整代码可在和中找到

在项目期间,这项技术一直运作良好。我在启动时从数据库加载单词列表,然后从那里开始工作

现在,我的问题是:由于项目现在需要一个新的功能,包含单词列表的数据库可以在运行时更改。这意味着,在进行更改之后,我应该重新加载完成符的单词列表

目前,程序开始崩溃。不是每次,而是“有时”。我无法准确地再现这次坠机。我只是继续尝试修改数据库(从完成程序调用“重新加载”),由于一些调试,我发现它在第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&)));
}

第5行的用途是什么?第5行断开旧的
MyCompleter
MyLineEdit
之间的所有连接,如果它有时在启动时崩溃,请检查
c
是否正确初始化。此外,您可能存在内存泄漏,在分配新的完成符之前,您应该删除旧的完成符,然后可以完全跳过断开连接。在
MyLineEdit
的构造函数中,您是否将
c
设置为空指针值?另外,您是否设置了与
destromed()
signal的连接,这样当
c
在其他地方被破坏时,您就可以将其设置为空指针值,这样您的行编辑就不会认为它仍然有效了?@Nejat:的确,我很好奇第5行的需要(这个类不是我自己的代码)。我注意到,如果我不使用它,只需将一个新的完成符分配给MyLineEdit,它将使用新的完成符,它就会工作。从那以后我再也没有撞车过。这是一个糟糕的解决方案吗?感觉有点“粗略”。