QCompleter运行时崩溃

时间:2015-09-21 17:33:29

标签: c++ qt qcompleter

我想做一个Code Completer,所以我继承了QCompleter:

http://hastebin.com/qeyumevisa.cpp

但是,当我尝试运行此代码时,我收到运行时错误:

Runtime Error

调试输出显示:

ASSERT: "d->widget != 0" in file util\qcompleter.cpp, line 1446

崩溃似乎来自第53行:

QCompleter::complete(rect);

我如何修复此错误?感谢

1 个答案:

答案 0 :(得分:2)

断言是从QCompleter::complete(rect);

触发的

这意味着QCompleter::widget()为零。私有成员d->widget始终由零初始化。它的类型是QPointer<QWidget>。窗口小部件仅由QCompleter::setWidget(QWidget *widget)设置。根据文档QCompleter::setWidget(QWidget *widget)

  

将为其提供完成的窗口小部件设置为窗口小部件。这个   在a上设置QCompleter时会自动调用该函数   QLineEdit使用QLineEdit::setCompleter()或使用QComboBox QComboBox::setCompleter()   QCompleter::setWidget()。小部件需要在何时明确设置   提供自定义小部件的完成。

因此,小部件必须由QLineEdit::setCompleter()QCompleter::complete(rect)设置。如果未使用这些选项,则如果完成模式不是QCompleter::InlineCompletion,则函数d->widget会崩溃。

因此,崩溃有两种可能性:

    在调用QCompleter::complete(rect); 时,
  • d->widget未初始化
  • 由于QPointerQWidget,因此当被引用的<html> <head> <meta charset="utf-8"> <link rel="stylesheet" href="css/normalize.css"> <link rel="stylesheet" href="css/main.css"> <meta name="viewport" content="width=device-width"> </head> <body> <div class="wrapper"> <div class="hometext"> You are the best! </div> </div> </body> 对象被销毁时,它可以自动设置为0。