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。