【问题标题】:Qt object/class to Qt ui fileQt 对象/类到 Qt ui 文件
【发布时间】:2011-12-31 00:18:50
【问题描述】:

这似乎是一个非常奇怪的问题,但是否可以从 Qt 对象生成 Qt 设计器表单 (.ui),比如继承 QWidget 的内容?

我的计划是在代码中构建一个简单的动态表单,让用户选择他们想要的内容,例如字段、控件类型,然后转储出一个.ui 文件,以便他们可以在之后需要时调整布局。

然后代码将使用QUiLoader 类重新加载ui 文件并显示修改或未修改的ui 文件。

【问题讨论】:

  • 我很想拥有这个工具,将大量 Qt-Designer 之前手工制作的小部件创建代码转换为 .ui 文件。我很久以前就问过这个问题——我认为是 Qt 开发人员——当时的答案是“不”。我很想知道这是否成为可能。
  • 该主题于 2011 年 3 月在 Qt Centre forum post 中进行了讨论。有人说他们可以付费进行转换,但没有提到可用的工具。
  • @Clare Macrae:我认为 Qt Center 论坛帖子试图直接解析源代码以生成 .ui 文件(静态),而 OP 强调通过构建简单表单的动态用户交互并将结果保存为 .ui 文件(表单设计器?)。
  • @menjaraz 是的,我相信你是对的。

标签: c++ qt user-interface


【解决方案1】:

Qt-Introspection 工具 GammaRay 可以在其最新版本 IIRC 中将对话框从 AUI(正在检查的应用程序)保存到 .ui 文件。

【讨论】:

    【解决方案2】:

    由于 QWidget 继承自 QObject,它获得了 QObject 提供的所有动态属性检查。 QObjects(和 QWidgets)也很自然地将它们自己排列成树(参见 QObject::parent 和 QObject::children)。通过跟踪小部件树并获取每个小部件的属性,您可以生成一个 xml .ui 文件,其中包含有关每个控件的基本信息。

    从预先建立的表格中计算出信号/插槽连接可能有点棘手,因为除了 QObject::dumpObjectInfo 之外似乎没有任何方法可以获取有关它们的信息,但对于您在中描述的程序您的问题很容易以其他方式跟踪它们。

    【讨论】:

      【解决方案3】:

      让我澄清一下,Qt Designer 有一个所见即所得的用户界面,可以创建一个 xml 格式的 Qt Designer 表单,然后在编译时将其转换为 C++ 代码。你是在问是否可以向后做?

      是的,我认为这是可能的,因为无论如何 Qt Designer 表单只是 xml。您可以制作一个接受 C++ 代码的应用程序,特别是用于完整声明类的代码,然后将类的 PROPERTIES 转换为相应的 xml 代码。这将涉及大量工作,在这一点上,我个人不再认为这一点了。

      编辑:这个项目需要你对 Qt Designer 进行逆向工程。但是是的,很有可能。

      【讨论】:

        【解决方案4】:

        不是这样。你还记得,UI 文件是在 compilet-me 生成适当的 .cpp 代码的源代码。 Gui-loader 是点到实现模式的一部分,有助于减少编译时间。

        【讨论】:

        • .ui 文件只是描述小部件层次结构的 xml。
        • 鉴于这个问题与使用 UiLoader 动态加载表单有关,它们在这里的作用是作为一个外部数据文件,在运行时对其进行解析以创建匹配的控件。
        【解决方案5】:

        您还可以使用设计器模块将 Qt 设计器嵌入到您自己的代码中。您需要将 CONFIG += 设计器添加到您的 .pro 文件中。

        请在此处查看设计器模块:http://developer.qt.nokia.com/doc/qt-4.8/qtdesigner.html

        【讨论】:

          猜你喜欢
          • 2022-07-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-13
          • 1970-01-01
          相关资源
          最近更新 更多