在 aux 方法中创建的 QWidget 不显示/绘制

Posted

技术标签:

【中文标题】在 aux 方法中创建的 QWidget 不显示/绘制【英文标题】:QWidget created in an aux method does not show/draw 【发布时间】:2013-11-18 18:42:46 【问题描述】:

我有一个基于 QWidget 的类,我需要从另一个对象实例化它。

如果我在其父小部件类的主体中创建小部件,一切都很好:

new NodeWidget(rootItem, this); // this works

但是当我使用 aux 方法时,小部件被创建,但从未绘制。

rootItem->createWidget(this); // internally rootItem does the same thing as above

方法本身:

void createWidget(QWidget * target) 
     if (!_ui) _ui = new NodeWidget(this, target);
...

在我看来,两种方法都做同样的事情,但第一种有效,而第二种无效。 NodeWidget 构造函数运行,但小部件未出现在父小部件中,并且从不调用paintEvent。任何想法为什么?

编辑:这当然很奇怪,我注意到以下行:

new QPushButton(this);

在父窗口小部件的构造函数中调用时有效,但在从 mousePress 事件中调用时无效。有什么区别?

【问题讨论】:

【参考方案1】:

您是否为自定义小部件调用 show()

如果子控件是在其父控件已显示后创建的,则父子关系也不能显示子控件,因此您需要显式调用show()

但是当小部件被添加到构造函数中时,还没有显示父级,然后当显示父级时,它会自动显示所有未显式隐藏的子级。

【讨论】:

我可能错误地认为 Qt 会在每次重绘 UI 时自动“显示”新的小部件。现在将对其进行测试。 现在我在调用show() 时遇到分段错误,我检查了从new 返回的指针,它是有效的,那么段错误是怎么回事? 你需要调试你的代码,我们无法猜测你为什么会出现分段错误,如果你不能修复它,你需要显示更多代码(检查你的类的未初始化/无效指针实例化) 嗯,createWidget 方法实际上贯穿了一个树层次结构,为其所有子级调用相同的方法。只有一个根子节点才会显示唯一的NodeWidget,例如该方法有效,但如果有孩子,它会失败。我调试了它,但我得到的只是它在第一个孩子的show()方法上崩溃,我在调用show()之前输出了指针,它是有效的,所以new不会失败......跨度>

以上是关于在 aux 方法中创建的 QWidget 不显示/绘制的主要内容,如果未能解决你的问题,请参考以下文章

使用 Qt Designer 表单和 PyQt5 在 QWidget 中绘制 matplotlib 图形

Xcode Swift 调试器不会显示在 if 语句中创建的变量

在 IB 中创建的静态 UILabel 显示缓慢

解决“在UBUNTU下打开windows中创建的文本文件,中文显示乱码”的问题 。

在 Google adsense 中创建的新单元不起作用

由 Terraform 在 LocalStack 中创建的 DynamoDB 表在 NoSQL Workbench 中不可见