我想做一个代码完成器,所以我将 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 上设置
QCompleter
a 时,会自动调用此函数。为自定义小部件提供补全时,需要显式设置小部件。QLineEdit
QLineEdit::setCompleter()
QComboBox
QComboBox::setCompleter()
因此,小部件必须由QCompleter::setWidget()
或设置QLineEdit::setCompleter()
。如果没有使用这些选项,则QCompleter::complete(rect)
如果完成模式不是,则函数会崩溃QCompleter::InlineCompletion
。
所以,崩溃有两种可能:
d->widget
调用前未初始化QCompleter::complete(rect);
d->widget
是a ,当引用的对象被销毁QPointer
时,它可以自动设置为0 。QWidget