Qt的ui编译机制
利用Qt来设计GUI界面有两种方法,一种是直接在cpp文件中编写界面,另一种就是利用ui文件来编写界面,在cpp中编写界面没有在ui文件中利用拖拽的形式来编写界面来更直观。但是Qt是如何将ui文件转换成C++代码却很令我困惑,因此我特意了解了一下Qt的ui编译机制,加深对Qt的理解。
利用uic来编译.ui文件
Qt的.ui文件通过Qt Designer设计好以后,利用uic程序将.ui文件中的xml语法转换为c++的类文件,假设ui文件名为mainwindow.ui
,在命令行中输入如下命令:
|
|
注意:若存在多个Qt版本,则可能需要指定相应uic执行路径
通过uic会生成mainwindow.ui
文件对应的头文件ui_mainwindow.h
,这个ui_mainwindow.h
文件的内容大致如下:
|
|
这个文件就是将.ui文件转换为C++可以看得懂的代码,之后参与Qt源代码的编译,可以看到这个文件中定义了一个Ui_MainWindow
类,里面包含了在.ui文件中创建的各种窗口部件的实现,文件最后还定义了一个命名空间:
|
|
这个命名空间Ui中包含了一个新类MainWindow
,而这个新类继承自Ui_MainWindow
类,之后我们便可以在别的文件中利用Ui::MainWindow
调用这个ui类,或者直接调用Ui_MainWindow
也可以。
Ui调用
在Qt项目中,在mainwindow.h
中添加Ui命名空间的声明:
|
|
之后在继承QMainWindow
类的对象声明中添加成员变量:
|
|
在mainwindow.cpp
的类构造函数中,初始化ui成员变量:
|
|
在类的析构函数中释放ui指针指向的内存空间:
|
|
这样便实现了ui的调用。