为提升的小部件设置父 QWidget

Set parent QWidget for promoted widgets

我有一个 Main QWidget,其中包含三个升级的小部件:A 来自 QGraphicsViewB 派生自 QLabelC 派生自 QWidget.
在应用程序退出时,我需要在 A 之前销毁 BC,但我发现自从ABC 父级自动设置为 Main, A先被销毁。这可以解决设置 A 作为 BC parent.

生成的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 的父级,您只需剪切属于 B<widget> 标签并将其粘贴到 内部 A<widget> 标签。像这样:

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

请注意,QtCreator 有一种合法的方式来编辑 .ui 文件:在 .ui 文件上单击鼠标右键,然后选择 "Open With -> Plain Text Editor"。

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

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

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