我想做一个代码完成器,所以我将 QCompleter 子类化:
http://hastebin.com/qeyumevisa.cpp
但是,当我尝试运行此代码时,出现运行时错误:
调试输出显示:
ASSERT: "d->widget != 0" in file util\qcompleter.cpp, line 1446
崩溃似乎来自第 53 行:
QCompleter::complete(rect);
我怎样才能修复这个错误?谢谢
我想做一个代码完成器,所以我将 QCompleter 子类化:
http://hastebin.com/qeyumevisa.cpp
但是,当我尝试运行此代码时,出现运行时错误:
调试输出显示:
ASSERT: "d->widget != 0" in file util\qcompleter.cpp, line 1446
崩溃似乎来自第 53 行:
QCompleter::complete(rect);
我怎样才能修复这个错误?谢谢
断言是从QCompleter::complete(rect);
这意味着它QCompleter::widget()为零。私有成员d->widget始终初始化为零。它的类型是QPointer<QWidget>. 小部件仅由 设置QCompleter::setWidget(QWidget *widget)。根据文档QCompleter::setWidget(QWidget *widget):
将为其提供完成的小部件设置为小部件。当在using或 using 上设置
QCompletera 时,会自动调用此函数。为自定义小部件提供补全时,需要显式设置小部件。QLineEditQLineEdit::setCompleter()QComboBoxQComboBox::setCompleter()
因此,小部件必须由QCompleter::setWidget()或设置QLineEdit::setCompleter()。如果没有使用这些选项,则QCompleter::complete(rect)如果完成模式不是,则函数会崩溃QCompleter::InlineCompletion。
所以,崩溃有两种可能:
d->widget调用前未初始化QCompleter::complete(rect);d->widget是a ,当引用的对象被销毁QPointer时,它可以自动设置为0 。QWidget