在多个 ui 文件之间拆分 Qt 表单
Posted
技术标签:
【中文标题】在多个 ui 文件之间拆分 Qt 表单【英文标题】:Splitting Qt forms between multiple ui files 【发布时间】:2014-05-15 10:58:17 【问题描述】:我在 Qt Designer 中创建了一个主窗口 UI 文件。为了避免混乱并使代码更加模块化,我想在单独的 ui 文件中创建此窗口的某些部分。
例如,我可能在主窗口上有一个选项卡小部件,然后我希望有单独的 page1.ui 和 page2.ui,然后我可以将它们“嵌入”到主窗口中。
是否可以仅使用 UI 文件,或者我是否需要为每个额外的小部件创建一个类?
我正在考虑创建单独的类 Page1UI
和 Page2UI
,它们公开继承自 qmake 生成的 ui_page1.h
和 ui_page2.h
(以便可以从主窗口轻松访问其中的小部件),然后推广这些类的主窗口占位符小部件。所以在代码中我会有这样的东西,例如:
connect (page1->ui->someButtonFromPage1uiFile, ..., this->ui->someMainWindowWidget, ...);
但是 Qt documentation 似乎没有提到公共继承,所以我想知道这是否是正确的方法,或者是否有更简单的方法。
【问题讨论】:
您可以在您的用户界面中使用自定义 QWidget,方法是将标准 QWidget“提升”为您想要放置的类型, @ratchetfreak 我在问题中说过。我想知道是否a)我需要为每个UI文件创建一个单独的文件,或者我可以以某种方式将它们直接嵌入到彼此中; b) 公共继承是创建我的自定义小部件的好方法吗? 【参考方案1】:您不需要继承。这些 UI 文件只是小部件。所以你当然可以这样做。您应该有一个主类,它将有一个选项卡小部件,然后只需在主选项卡小部件中添加您的 page1、page2 等。在我看来,你需要的是作文。
您需要做的是创建一个从QWidget
派生的单独类,该类将包含您生成的 UI 表单的对象。您需要在新类中调用该生成表单的setupUI()
,并将this
作为参数。
【讨论】:
从技术上讲,我如何将主窗口的一个小部件提升到另一个 ui 小部件?假设我有一个form.ui
,它生成ui_form.h
。我尝试将一个小部件提升到 Ui_Form
类,但出现了几个错误,指出 Ui_Form
不是 QWidget
。
@Marian 我在回答中添加了详细信息。
是的,这是有道理的。那么在我的 QWidget 派生类中,UI 表单应该是一个成员,还是应该通过公共或私有继承从它派生?请注意,如果我将其设为私有成员,我将无法直接从主窗口类访问它。
应该是会员。我看不出有任何私有继承的理由,它也降低了代码的可读性。为其添加访问器,以便您可以在主窗口中访问它。
Qt 文档本身建议私有继承,但感谢您为我指明了正确的方向。以上是关于在多个 ui 文件之间拆分 Qt 表单的主要内容,如果未能解决你的问题,请参考以下文章