【问题标题】:Set parent QWidget for promoted widgets为提升的小部件设置父 QWidget
【发布时间】:2017-08-03 18:52:22
【问题描述】:

我有一个 Main QWidget,其中包含三个提升的小部件:A 派生自 QGraphicsViewB 派生自 QLabelC 派生自 QWidget
在应用程序退出时,我需要在 A 之前销毁 BC,但我发现由于 ABC 父级自动设置为 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

【问题讨论】:

  • 一旦你有了你喜欢的布局,你为什么不能编辑 XML 并交换顺序以适应?
  • @SPlatten 因为当我从 Qt Creator 切换到 XML 视图时,它说“这个文件只能在设计模式下编辑。”
  • 是的,我意识到这一点,但是没有什么能阻止您在 IDE 之外打开文件并使用文本编辑器编辑订单。
  • @SPlatten 好的,那么我应该对 XML 进行哪些更改以使 A 成为 B 和 C 的父级?
  • 将 B 和 C 拖入 A 体内就可以了。感谢您的提示!

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


【解决方案1】:

如果您的 3 个小部件不属于同一布局,您可以手动编辑 .ui 文件以将适当的父级分配给小部件。要使小部件A 成为小部件B 的父级,您只需剪切属于B<widget> 标记并将其粘贴内部 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 文件中生成的代码实际上并不重要 — 您将重置它。

【讨论】:

    猜你喜欢
    • 2011-02-28
    • 2019-09-14
    • 2019-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-18
    • 1970-01-01
    • 2011-12-14
    相关资源
    最近更新 更多