11 界面文件与界面类

基于C++语言的面向对象编程,离不开类的声明、定义和实例化。在之前利用Qt创造器创建的Calculator2项目中,已经包含了用于描述用户界面的界面文件,以及与之相对应的界面类,并将该类实例化为表示界面实体的C++对象。

11.1 界面文件

C:\Users\Minwei\Projects\Qt\Calculator2\calculatordialog.ui:

界面文件的扩展名为“.ui”,由Qt设计师自动生成,将程序编写者在图形化界面设计器中,所做的所有设计工作,全部记录在一个XML格式的文本文件中。该文件可被Qt设计师重新打开,并编辑修改。

11.2 原始界面类

Qt创造器调用界面编译器uic,执行如下命令:

将XML格式的界面文件编译为原始界面类文件。

C:\Users\Minwei\Projects\Qt\Calculator2\ui_calculatordialog.h:

该文件定义了一个名为“Ui_CalculatorDialog”的原始界面类,其中包含了界面文件中对用户界面的所有描述。该类的公有方法setupUi,用于创建并初始化界面中的全部元素。注意,在项目的其它代码中,并没有直接使用Ui_CalculatorDialog类,而是使用了该类在Ui名字空间中的子类CalculatorDialog。

11.3 自定义界面类

原始界面类由界面编译器uic根据界面文件自动生成,不需要也不应该手动编辑修改该文件。所有针对用户界面的定制化操作,都在自定义界面类中完成。自定义界面类的声明和实现分别位于calculatordialog.h和calculatordialog.cpp文件中。

C:\Users\Minwei\Projects\Qt\Calculator2\calculatordialog.h:

C:\Users\Minwei\Projects\Qt\Calculator2\calculatordialog.cpp:

这里定义了一个名为“CalculatorDialog”的类,注意它与前面提到的,Ui名字空间里的CalculatorDialog类,不是同一个类。这里的CalculatorDialog类是QDialog类的子类,而Ui名字空间里的CalculatorDialog类则是Ui_CalculatorDialog类的子类。

CalculatorDialog类可以多重继承自QDialog类和Ui::CalculatorDialog类,比如:

也可以只继承QDialog类,并组合Ui::CalculatorDialog类的实例,比如:

显然,Qt创造器自动生成的代码,默认采用的是组合方式。Qt创造器所生成的自定义界面类,只包含最基本的代码框架,程序编写者将进一步完善这个类,并将业务逻辑纳入其中。

11.4 界面对象

Qt创造器已经自动生成了可执行程序的入口函数main,位于名为“main.cpp”的文件中。

C:\Users\Minwei\Projects\Qt\Calculator2\main.cpp:

这里直接将前面定义的界面类CalculatorDialog,实例化为一个界面对象w,并通过其show方法,显示该对象。