C++ Qt对象/类到Qt ui文件

C++ Qt对象/类到Qt ui文件,c++,qt,user-interface,C++,Qt,User Interface,这似乎是一个非常奇怪的问题,但是否有可能从一个Qt对象生成一个Qt设计器表单(.ui),比如继承QWidget 我的计划是在代码中构建一个简单的动态表单,用户可以选择他们想要的内容,例如字段、控件类型,然后转储一个.ui文件,这样他们可以在需要时调整布局 然后,代码将使用QUiLoader类重新加载ui文件,并显示修改或未修改的ui文件。不是这样。正如您所记得的,UI文件是在compilet me上生成适当的.cpp代码的源代码。Gui加载程序是点对点实现模式的一部分,它有助于减少编译时间 由于

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

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


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

不是这样。正如您所记得的,UI文件是在compilet me上生成适当的.cpp代码的源代码。Gui加载程序是点对点实现模式的一部分,它有助于减少编译时间

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


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

让我澄清一下,Qt设计器有一个WYSIWYG用户界面,它创建了一个XML格式的Qt设计器表单,然后在编译时转换成C++代码。你在问一个人是否能倒转

是的,我确实认为这是可能的,因为Qt设计器表单无论如何都只是xml。您可以创建一个应用程序,该程序接受C++代码,特别是用于完成类声明的代码,然后将类的属性转换为相应的XML代码。这将涉及到大量的工作,在这一点上,我个人不认为这一点了


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

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


请看一下这里的designer模块:

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

我希望有这样的功能,将大量Qt设计师之前手工制作的小部件创建代码转换为.ui文件。很久以前我问过它——我想是一个Qt开发人员——当时的答案是“不”。我很想知道这是否成为可能。这个话题在2011年3月的一次会议上讨论过。一个人说他们可以免费进行转换,但没有提到可用的工具。@Clare Macrae:我认为Qt中心论坛的帖子试图直接解析源代码,从而生成一个.ui文件(静态)然而OP强调了通过用户交互构建简单表单的动态性,并将结果持久化为.ui文件(表单设计器?)。@menjaraz是的,我相信你是对的。一个.ui文件只是描述小部件层次结构的xml。鉴于问题与使用UiLoader动态加载表单有关,它们在这里的作用是作为一个外部数据文件,在运行时解析该文件以创建匹配的控件。