我想做一个代码完整器,所以我对QCompleter进行了子类:
http://hastebin.com/qeyumevisa.cpp
但是,当我试图运行这段代码时,我会得到一个运行时错误:

调试输出显示:
ASSERT: "d->widget != 0" in file util\qcompleter.cpp, line 1446崩溃似乎来自于第53行:
QCompleter::complete(rect);我怎么才能解决这个问题?谢谢
发布于 2015-09-21 19:51:29
断言是从QCompleter::complete(rect);触发的
这意味着QCompleter::widget()是零。私有成员d->widget总是由零初始化。它的类型是QPointer<QWidget>。小部件仅由QCompleter::setWidget(QWidget *widget)设置。根据文档QCompleter::setWidget(QWidget *widget)
设置为其提供完成的小部件。当
QCompleter在QLineEdit上使用QLineEdit::setCompleter()设置或在QComboBox上使用QComboBox::setCompleter()设置时,将自动调用此函数。在为自定义小部件提供完成时,需要显式地设置小部件。
因此,小部件必须由QCompleter::setWidget()或QLineEdit::setCompleter()设置。如果不使用这些选项,则如果完成模式不是QCompleter::InlineCompletion,则函数QCompleter::InlineCompletion会崩溃。
因此,坠机有两种可能性:
d->widget之前未初始化QCompleter::complete(rect);d->widget是一个QPointer,所以当被引用的QWidget对象被销毁时,它可以自动设置为0。https://stackoverflow.com/questions/32701288
复制相似问题