QCompleter 运行时崩溃
QCompleter runtime crash
我想做一个代码完成器,所以我将 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)
:
Sets the widget for which completion are provided for to widget. This
function is automatically called when a QCompleter
is set on a
QLineEdit
using QLineEdit::setCompleter()
or on a QComboBox
using
QComboBox::setCompleter()
. The widget needs to be set explicitly when
providing completions for custom widgets.
因此,必须通过 QCompleter::setWidget()
或 QLineEdit::setCompleter()
设置小部件。如果没有使用这些选项,如果完成模式不是 QCompleter::InlineCompletion
,函数 QCompleter::complete(rect)
就会崩溃。
所以,崩溃有两种可能:
d->widget
在调用 QCompleter::complete(rect);
之前未初始化
- 因为
d->widget
是一个 QPointer
它可以在引用的 QWidget
对象被销毁时自动设置为 0。
我想做一个代码完成器,所以我将 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)
:
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::InlineCompletion
,函数 QCompleter::complete(rect)
就会崩溃。
所以,崩溃有两种可能:
d->widget
在调用QCompleter::complete(rect);
之前未初始化
- 因为
d->widget
是一个QPointer
它可以在引用的QWidget
对象被销毁时自动设置为 0。