我想做一个Code Completer,所以我继承了QCompleter:
http://hastebin.com/qeyumevisa.cpp
但是,当我尝试运行此代码时,我收到运行时错误:
调试输出显示:
ASSERT: "d->widget != 0" in file util\qcompleter.cpp, line 1446
崩溃似乎来自第53行:
QCompleter::complete(rect);
我如何修复此错误?感谢
答案 0 :(得分:2)
断言是从QCompleter::complete(rect);
这意味着QCompleter::widget()
为零。私有成员d->widget
始终由零初始化。它的类型是QPointer<QWidget>
。窗口小部件仅由QCompleter::setWidget(QWidget *widget)
设置。根据文档QCompleter::setWidget(QWidget *widget)
:
将为其提供完成的窗口小部件设置为窗口小部件。这个 在a上设置
QCompleter
时会自动调用该函数QLineEdit
使用QLineEdit::setCompleter()
或使用QComboBox
QComboBox::setCompleter()
QCompleter::setWidget()
。小部件需要在何时明确设置 提供自定义小部件的完成。
因此,小部件必须由QLineEdit::setCompleter()
或QCompleter::complete(rect)
设置。如果未使用这些选项,则如果完成模式不是QCompleter::InlineCompletion
,则函数d->widget
会崩溃。
因此,崩溃有两种可能性:
QCompleter::complete(rect);
时,d->widget
未初始化
QPointer
是QWidget
,因此当被引用的<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="css/normalize.css">
<link rel="stylesheet" href="css/main.css">
<meta name="viewport" content="width=device-width">
</head>
<body>
<div class="wrapper">
<div class="hometext">
You are the best!
</div>
</div>
</body>
对象被销毁时,它可以自动设置为0。