剖析Qt的ui_*.h文件
在QT工程中的mainwindow.h常见的几行:
namespace Ui { class MainWindow; } ...... private: Ui::MainWindow *ui;
在QT工程中的mainwindow.cpp常见的几行:
#include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); }
ui文件实际是xml格式的,Qt编译时,先用uic工具将mainwindow.ui编译生成ui_mainwindow.h,转化为c++类,就是 Ui::MainWindow。头文件的部分相关代码:
QT_BEGIN_NAMESPACE class Ui_MainWindow { public: QWidget *centralWidget; QRadioButton *radioButton; QMenuBar *menuBar; QToolBar *mainToolBar; QStatusBar *statusBar; void setupUi(QMainWindow *MainWindow) { if (MainWindow->objectName().isEmpty()) MainWindow->setObjectName(QStringLiteral("MainWindow")); MainWindow->resize(402, 302); centralWidget = new QWidget(MainWindow); ...... void retranslateUi(QMainWindow *MainWindow) { MainWindow->setWindowTitle(QApplication::translate("MainWindow", "MainWindow", nullptr)); radioButton->setText(QApplication::translate("MainWindow", "RadioButton", nullptr)); } } namespace Ui { class MainWindow: public Ui_MainWindow {}; } QT_END_NAMESPACE
Note: ui_*.h文件不要修改,因为修改了也没用,下次 uic 工具会自动生成这个文件,之前的修改就被覆盖了。
从代码中可以看出在.ui文件中拖拽的控件是Ui::MainWindow类的public成员。
setupUi()成员函数,其参数是个QMainWindow指针。实际上,不拖控件而直接在mainwindow.cpp中建立控件的方法就相当于自己写setupUi函数的部分代码。
retranslateUi():重新翻译界面,如果做了多国语言翻译,这个函数可以将界面翻译成其他语言显示。
Note:QT_BEGIN_NAMESPACE 和QT_END_NAMESPACE两个宏,其实是空宏。
QMetaObject::connectSlotsByName(MainWindow)是根据信号和槽函数名称等实现自动关联的关键函数。
Ui命名空间中的 MainWindow 与继承自QMainWindow的 MainWindow 不是一回事,前者仅继承Ui_MainWindow,后者的private成员ui指针指向前者。
Note:如果在如图所示的位置将顶层窗口的名称修改了
假设修改为communication,则在MainWindow.h文件中的
namespace Ui { class MainWindow; } class MainWindow;要修改成class communication;
在MainWindow.cpp文件中的
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) {……} ui(new Ui::MainWindow)需要修改为ui(new Ui::communication)
之所以这样修改是应为在设计器中修改了顶层窗口的名称则编译后生成的ui_*.h文件中的类名称也发生了相应的变化,如果不做上述相关修改将出现编译出错的情况。
以上相关知识参考了 SilentAssassin的文章内容,再次感谢 SilentAssassin,谢谢。
- Qt基础——UI文件.h文件说明
- Qt工程在Linux下编译时出现.ui文件编译不通过的问题
- 在Qt中如何使用QtDesigner创建的UI文件(二)
- QT在GUI中右键菜单Go to slot...报错未找到匹配的ui_xxx.h文件,请尝试重新编译
- 从 QT3 到 QT4, designer 到 creator,QT UI文件的变化
- Qt中从.ui文件生成.h文件
- QT4.3.0升级为5.1.1出现编辑后的ui文件不能保存
- Qt基础——UI文件.h文件说明
- vs环境下QT新建.ui文件无法自动生成ui_xxx.h
- Qt 生成ui对应的h文件和cpp文件的方法
- QT 总结(四) 1.中文编码 乱码 2.QFileDialog 打开文件框 3.调用其它UI文件 4.QMessageBox弹窗
- QT5 执行qmake 的时候不能为xxx.ui生成ui_xxx.h 文件
- Qt探秘——谈ui文件的用法
- QT如何将.UI文件转成.h或.cpp文件
- Qt工程在Linux下编译时出现.ui文件编译不通过的问题
- QT怎样使用Ui文件
- QT(2):添加ui文件及构建ui文件的头文件说明
- qt在vs2013中打不开.*ui文件
- QT 总结(四) 1.中文编码 乱码 2.QFileDialog 打开文件框 3.调用其它UI文件 4.QMessageBox弹窗