首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QCompleter运行时崩溃

QCompleter运行时崩溃
EN

Stack Overflow用户
提问于 2015-09-21 17:33:28
回答 1查看 396关注 0票数 2

我想做一个代码完整器,所以我对QCompleter进行了子类:

http://hastebin.com/qeyumevisa.cpp

但是,当我试图运行这段代码时,我会得到一个运行时错误:

调试输出显示:

代码语言:javascript
复制
ASSERT: "d->widget != 0" in file util\qcompleter.cpp, line 1446

崩溃似乎来自于第53行:

代码语言:javascript
复制
QCompleter::complete(rect);

我怎么才能解决这个问题?谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-21 19:51:29

断言是从QCompleter::complete(rect);触发的

这意味着QCompleter::widget()是零。私有成员d->widget总是由零初始化。它的类型是QPointer<QWidget>。小部件仅由QCompleter::setWidget(QWidget *widget)设置。根据文档QCompleter::setWidget(QWidget *widget)

设置为其提供完成的小部件。当QCompleterQLineEdit上使用QLineEdit::setCompleter()设置或在QComboBox上使用QComboBox::setCompleter()设置时,将自动调用此函数。在为自定义小部件提供完成时,需要显式地设置小部件。

因此,小部件必须由QCompleter::setWidget()QLineEdit::setCompleter()设置。如果不使用这些选项,则如果完成模式不是QCompleter::InlineCompletion,则函数QCompleter::InlineCompletion会崩溃。

因此,坠机有两种可能性:

  • 在调用d->widget之前未初始化QCompleter::complete(rect);
  • 由于d->widget是一个QPointer,所以当被引用的QWidget对象被销毁时,它可以自动设置为0。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32701288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档