c++ - 为提升的小部件设置父 QWidget

标签 c++ qt parent-child qt-designer

我有一个 Main QWidget,它包含三个提升的小部件:A 来自 QGraphicsView B 派生自QLabelC 派生自QWidget
在应用程序退出时,我需要在 A 之前销毁 BC,但我发现自 A 以来, BC parent 自动设置为MainA 首先被销毁。这可以通过将 A 设置为 BC 父级来解决。

生成的 ui_ProjectName.h 文件有:

a = new A(Main);
b = new B(Main);
c = new C(Main);

但应该是:

a = new A(Main);
b = new B(a);
c = new C(a);

有没有办法直接从 Qt Designer 执行此操作以生成正确的 ui_ProjectName.h

最佳答案

如果您的 3 个小部件不属于同一布局,您可以手动编辑 .ui文件以将适当的父级分配给小部件。制作小部件 A小部件的父项 B你可以剪掉<widget>属于 B 的标签并将其粘贴到内部 A<widget>标签。像这样:

<widget class="QWidget" name="A">
    <widget class="QWidget" name="B">
       ...
    </widget>
</widget>

请注意,QtCreator 有合法的方式来编辑.ui文件:在 .ui 上单击鼠标右键文件,然后选择“打开方式 -> 纯文本编辑器”。

但是注意:如果你有规则,这会破坏布局规则。 如果您不想破坏这种情况下的布局,您可以尝试通过代码在运行时重新分配父级:

bWidget->setParent(aWidget);
cWidget->setParent(aWidget);

在这种情况下,ui_*.h 中生成的代码实际上并不重要。文件——您将重置它。

关于c++ - 为提升的小部件设置父 QWidget,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45481362/

相关文章:

c++ - 将版本作为字符串进行比较

qt - 如何恢复 QTreeView 最后展开的状态?

php - Qt 从数据库获取重音

php - Laravel 4 - Eloquent 。无限的 child ​​变成可用的数组?

javascript - 为什么我无法通过 document.getElementById ("node' s_id").child 选择子节点?

c++ - 在免费商店上创建对象有什么用?

c++ - AVL 树插入 - 段错误

C++如何调用子类函数

c++ - QTest - 无法将 Qt::Enter 传递给 QPushButton

Django-管理员 : Editing child model without inlineForm