类功能:
以默认创建的工程为例, 创建后会生成一个MainWindow的类, 用于在main函数内部创建, 并通过该类调用.show函数驱动窗口显示.
另外还会生成一个Ui_MainWindow类, 这个类的作用是初始化mainwindow.ui内部定义的一些窗口控件.
整个调用流程:
main函数内部创建MainWindow类的实例, 创建时调用其构造函数, 并创建一个Ui_MainWindow类的实例, 保存在MainWindow类内部的Ui_MainWindow指针里.
之后在MainWindow类的构造函数调用setupUi, 将MainWindow实例传入给Ui_MainWindow并真正开始进行MainWindow的一些控件初始化工作.
一些奇怪的声明和初始化:
1 2 3 4 5 |
namespace Ui { class MainWindow; } |
这是在Ui的命名空间里声明MainWindow类, 因为不传进去Ui_MainWindow便无法对该类进行初始化操作, 因为会不认识该类名
1 2 3 |
ui(new Ui::MainWindow) |
以上是构造函数被调用时的初始化操作, 看上去是又创建了个MainWindow实例, 实际不是, 这个是在Ui命名空间的类, 实际直接继承自Ui_MainWindow, 并且没有添加新的任何函数, 实际上创建的就是Ui_MainWindow实例, 用来初始化主函数创建的MainWindow实例.