Qt对象/类到Qt UI文件

9
这可能听起来很奇怪,但是从一个继承自QWidget的Qt对象生成Qt Designer表单(.ui)是否可能?
我的计划是在代码中构建一个简单的动态表单,当用户选择所需的内容时,如字段、控件类型等,然后输出一个.ui文件,以便他们在需要时调整布局。
然后,代码将使用QUiLoader类重新加载ui文件并显示修改后或未修改的ui文件。

1
我很想拥有这个功能,能够将大量的预先使用Qt Designer手工创建的小部件生成代码转换为.ui文件。 我很久以前就问过一个Qt开发者,当时的回答是“不行”。 我很想知道它是否已经变得可行。 - Clare Macrae
这个话题在2011年三月的一个Qt Centre论坛帖子中已经讨论过。有一位人士表示他可以进行转换,但需要付费,并且没有提及任何可用的工具。 - Clare Macrae
@Clare Macrae:我认为Qt Centre论坛帖子是试图直接解析源代码以产生一个.ui文件(静态),而原帖强调通过用户交互动态构建简单表单并将结果保留为.ui文件(表单设计师?)。 - menjaraz
@menjaraz 是的,我相信你是对的。 - Clare Macrae
5个回答

3
Qt-Introspection 工具 GammaRay 的最新版本可以将 AUI(应用程序检查)中的对话框保存为 .ui 文件,如我所知。

1

由于QWidget继承自QObject,因此它具有QObject提供的所有动态属性检查功能。 QObjects(和QWidgets)也会自然地排列成树形结构(请参见QObject :: parent和QObject :: children)。 通过遍历小部件树并获取每个小部件的属性,您可以生成包含每个控件基本信息的xml .ui文件。

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


0

让我澄清一些事情,Qt Designer具有所见即所得的用户界面,可以创建一个以xml格式表示的Qt Designer表单,然后在编译时将其转换为C++代码。您现在问的是是否可以反过来做这个过程?

是的,我认为这是可能的,因为Qt Designer表单本质上就是xml。您可以编写一个应用程序,接受C++代码,特别是用于完整声明类的代码,然后将类的属性转换为相应的xml代码。这需要大量的工作,到那时,我个人认为已经没有意义了。

编辑:此项目需要您对Qt Designer进行逆向工程。但是,是的,这是完全可能的。


-1

不是那样的。正如您所记得的,UI文件是生成适当的.cpp代码的源代码,用于编译器。Gui-loader是指向实现模式的一部分,有助于减少编译时间。


.ui文件只是描述小部件层次结构的XML。 - Tyr
考虑到这个问题涉及使用UiLoader动态加载表单,它们在这里的作用是作为外部数据文件,在运行时解析以创建匹配的控件。 - Tyr

-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接