Qt从旧c++;项目 我对QT很陌生,但对C++有很好的理解。我刚刚学习了qt设计(QT5)来生成GUI和.ui文件,并在VS 2012中进行编码

Qt从旧c++;项目 我对QT很陌生,但对C++有很好的理解。我刚刚学习了qt设计(QT5)来生成GUI和.ui文件,并在VS 2012中进行编码,c++,qt,C++,Qt,现在有一个纯手工编写的老项目,没有qt设计。为了维护它,代码仍然需要手工编写 是否有任何qt工具可以对代码进行反向工程,以生成qt design可以处理的东西?这样将来的任何GUI修改都可以在qt设计中使用 非常感谢一个准备充分的项目将把应用程序逻辑与UI层隔离开来,从而更容易对后者进行更改或完全替换后者。如果您想要转换的项目是这样的,那么它在某种程度上应该是可行的 如果您保持相同的命名,那么命令式UI和.UI生成的UI之间最显著的区别就是访问UI成员时额外的UI-> 没有任何工具可以为您完成所

现在有一个纯手工编写的老项目,没有qt设计。为了维护它,代码仍然需要手工编写

是否有任何qt工具可以对代码进行反向工程,以生成qt design可以处理的东西?这样将来的任何GUI修改都可以在qt设计中使用


非常感谢

一个准备充分的项目将把应用程序逻辑与UI层隔离开来,从而更容易对后者进行更改或完全替换后者。如果您想要转换的项目是这样的,那么它在某种程度上应该是可行的

如果您保持相同的命名,那么命令式UI和
.UI
生成的UI之间最显著的区别就是访问UI成员时额外的
UI->

没有任何工具可以为您完成所有工作,但您可以使用
QObject::dumpObjectTree()
获得UI的树状表示,如下所示:

QTabDialog::dialog <574,451,133,123>
      QBoxLayout::unnamed
        QBoxLayout::unnamed
        QBoxLayout::unnamed
      QPushButton::ok <45,91,82,26>
      QTabWidget::tab widget <6,6,119,75>
        QTabBar::tab control <0,0,48,24>
          QToolButton::qt_right_btn I
          QToolButton::qt_left_btn I
          QAccel::tab accelerators
        QWidget::tab base I
        QWidgetStack::tab pages <0,22,119,51>
          QFrame::first <2,2,115,47>
          QObject::unnamed
          QWidgetStackPrivate::Invisible::unnamed <2,2,115,47>
QTabDialog::dialog
QBoxLayout::未命名
QBoxLayout::未命名
QBoxLayout::未命名
QPushButton::好的
QTabWidget::选项卡小部件
QTabBar::选项卡控件
QToolButton::qt\u right\u btn I
QToolButton::qt_left_btn I
标签加速器
QWidget::选项卡库I
QWidgetStack::选项卡页
QFrame::first
QObject::未命名
QWidgetStackPrivate::不可见::未命名
如您所见,您可以轻松地解析它并获取当前UI中每个对象的类型和名称,您可以使用该信息以及元系统提供的功能来查询属性并生成XML.UI文件

当然,您可以拥有一个动态创建或删除元素的更加动态的UI,在这种情况下,这样做会更加困难。在这种情况下,你将不得不手工完成所有工作。

简短回答:不

是的,但至少我不知道任何工具,它可以用C++ GUI并从中生成一个.UI文件。如果存在这样的事情,它很可能不解析C++代码,而是需要以某种方式附加到运行的应用程序,然后将解析它的GUI。据我所知,由于Qt元对象和属性系统允许反射,这实际上并不难实现,但我不知道有这样的工具,我怀疑它是否存在。有一些GUI测试工具可以做到这一点,但它们不会用从运行中的应用程序收集的数据生成.ui文件

<>但是,用手工编写QT-GUI是完全合理的,而且它也更易于维护(只要维护人员在Qt风格C++和QWidgets中流畅)。
此外,如果您需要向GUI添加新的小部件(或者从根本上修改现有的小部件,以便从头开始重写是合理的),那么使用Qt Designer实现这些小部件是没有问题的(独立版本或集成到Qt Creator IDE中的版本,不要与QML Designer混合,即使它们位于Qt Creator中的同一图标后面)。根据我的观点和经验,通常最好设计单个小部件(例如,QTabWidget中的页面或对话框)使用Designer,但不能将整个UI作为一个大的.UI文件。

我同意这里的@hyde。实现这样的工具不值得费事。使用Qt Designer制作布局非常快

但答案是肯定的

一个软件自省工具,可以将运行中的Qt应用程序中的小部件保存到
.ui
文件中(我相信从2012年开始)。在Qt 5.12上测试-布局完全正确,但没有信号,没有对象名称,尽管它为恢复对象的层次结构及其属性提供了一个良好的起点


和的所有荣誉。

除了手工编写代码外,如何编写代码?@user1095108问题上下文使其含义相当明显。UI代码在这里的意思是,似乎没有这样的工具可用,尽管我希望有。我保留了一个小UI文件的存储库,这些文件表示在设计器中创建的不同类型的UI对象-一个选项卡控件,一个按钮框控件等。然后当我想在我的现有代码中使用一个,我打开了设计器中的适当的UI文件,修改我的需求,在设计器中生成C++,然后把它放到我的应用程序中——这需要一点编辑和按摩,你必须知道Qt C++的GUI代码是如何工作的,但是通常工作得很好。,而且比从头开始编写整个GUI组件更容易!