为提升的小部件设置父 QWidget
Set parent QWidget for promoted widgets
我有一个 Main QWidget
,其中包含三个升级的小部件:A 来自 QGraphicsView
,B 派生自 QLabel
和 C 派生自 QWidget
.
在应用程序退出时,我需要在 A 之前销毁 B 和 C,但我发现自从A、B 和 C 父级自动设置为 Main, A先被销毁。这可以解决设置 A 作为 B 和 C 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
文件中生成的代码实际上并不重要 — 您将重置它。
我有一个 Main QWidget
,其中包含三个升级的小部件:A 来自 QGraphicsView
,B 派生自 QLabel
和 C 派生自 QWidget
.
在应用程序退出时,我需要在 A 之前销毁 B 和 C,但我发现自从A、B 和 C 父级自动设置为 Main, A先被销毁。这可以解决设置 A 作为 B 和 C 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
文件中生成的代码实际上并不重要 — 您将重置它。