c++ - QCompleter 运行时崩溃

标签 c++ qt qcompleter

我想做一个代码完成器,所以我将 QCompleter 子类化:

http://hastebin.com/qeyumevisa.cpp

但是,当我尝试运行此代码时,出现运行时错误:

Runtime Error

调试输出显示:

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 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::complete(rect)如果完成模式不是 QCompleter::InlineCompletion 则会崩溃.

所以,崩溃有两种可能:

  • d->widget在调用 QCompleter::complete(rect); 之前未初始化
  • d->widgetQPointer当引用QWidget时可以自动设置为0对象被销毁。

关于c++ - QCompleter 运行时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32701288/

相关文章:

c++ - 带有隐藏控制台窗口的 AllocConsole()

c++ - 限定 C++ 宏的范围?

c++ - 在 C++ 中如何像 Java 那样定义列表列表或堆栈列表?

python - 从多列(其中一列)的开头自动完成

c++ - 要使用的类初始化括号

C++ Qt 基类虚析构函数

qt - 需要在 QML 中更改 SVG 图像的颜色

python - PyQt5 QCompleter如何在选择自动完成文本后清除QLineEdit

python - 通过 Qt 和 Python 在 QTableView 中使用 QCompleter

c++ - 使用 QStandardItem 传输自定义数据 (Type*) 时内存泄漏?