【问题标题】:Splitting Qt forms between multiple ui files在多个 ui 文件之间拆分 Qt 表单
【发布时间】:2014-05-15 10:58:17
【问题描述】:

我在 Qt Designer 中创建了一个主窗口 UI 文件。为了避免混乱并使代码更加模块化,我想在单独的 ui 文件中创建此窗口的某些部分。

例如,我可能在主窗口上有一个选项卡小部件,然后我希望有单独的 page1.ui 和 page2.ui,然后我可以将它们“嵌入”到主窗口中。

是否可以仅使用 UI 文件,或者我是否需要为每个额外的小部件创建一个类?

我正在考虑创建单独的类 Page1UIPage2UI,它们公开继承自 qmake 生成的 ui_page1.hui_page2.h(以便可以从主窗口轻松访问其中的小部件),然后推广这些类的主窗口占位符小部件。所以在代码中我会有这样的东西,例如:

connect (page1->ui->someButtonFromPage1uiFile, ..., this->ui->someMainWindowWidget, ...);

但是 Qt documentation 似乎没有提到公共继承,所以我想知道这是否是正确的方法,或者是否有更简单的方法。

【问题讨论】:

  • 您可以在您的用户界面中使用自定义 QWidget,方法是将标准 QWidget“提升”为您想要放置的类型,
  • @ratchetfreak 我在问题中说过。我想知道是否a)我需要为每个UI文件创建一个单独的文件,或者我可以以某种方式将它们直接嵌入到彼此中; b) 公共继承是创建我的自定义小部件的好方法吗?

标签: c++ qt inheritance user-interface qt-designer


【解决方案1】:

您不需要继承。这些 UI 文件只是小部件。所以你当然可以这样做。您应该有一个主类,它将有一个选项卡小部件,然后只需在主选项卡小部件中添加您的 page1、page2 等。在我看来,你需要的是作文。

您需要做的是创建一个从QWidget 派生的单独类,该类将包含您生成的 UI 表单的对象。您需要在新类中调用该生成表单的setupUI(),并将this 作为参数。

【讨论】:

  • 从技术上讲,我如何将主窗口的一个小部件提升到另一个 ui 小部件?假设我有一个form.ui,它生成ui_form.h。我尝试将一个小部件提升到 Ui_Form 类,但出现了几个错误,指出 Ui_Form 不是 QWidget
  • @Marian 我在回答中添加了详细信息。
  • 是的,这是有道理的。那么在我的 QWidget 派生类中,UI 表单应该是一个成员,还是应该通过公共或私有继承从它派生?请注意,如果我将其设为私有成员,我将无法直接从主窗口类访问它。
  • 应该是会员。我看不出有任何私有继承的理由,它也降低了代码的可读性。为其添加访问器,以便您可以在主窗口中访问它。
  • Qt 文档本身建议私有继承,但感谢您为我指明了正确的方向。
猜你喜欢
  • 2014-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多