我想做一个代码完成器,所以我将 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()
为零。私有(private)成员(member)d->widget
总是用零初始化。其类型为QPointer<QWidget>
。该小部件仅由 QCompleter::setWidget(QWidget *widget)
设置。根据文档 QCompleter::setWidget(QWidget *widget)
:
Sets the widget for which completion are provided for to widget. This function is automatically called when a
QCompleter
is set on aQLineEdit
usingQLineEdit::setCompleter()
or on aQComboBox
usingQComboBox::setCompleter()
. The widget needs to be set explicitly when providing completions for custom widgets.
因此,小部件必须通过 QCompleter::setWidget()
设置或通过 QLineEdit::setCompleter()
。如果未使用这些选项,则函数 QCompleter::complete(rect)
如果完成模式不是 QCompleter::InlineCompletion
则会崩溃.
所以,崩溃有两种可能:
-
d->widget
在调用QCompleter::complete(rect);
之前未初始化 - 自
d->widget
是QPointer
当引用QWidget
时可以自动设置为0对象被销毁。
关于c++ - QCompleter 运行时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32701288/