*.ui界面文件对应的ui_*.h文件的作用

研究*.ui界面文件对应的ui_*.h文件的作用


ui_*.h 是在对 *.ui 文件编译后生成的一个文件,ui_*.h 会出现在编译后的目录下,或与 *.ui 同目录(与项目的 shadow build 编译设置有关)。

查看 ui_*.h 文件的内容,发现它主要做了以下的一些工作:

1.定义了一个类 Ui_*,用于封装可视化设计的界面。

2.自动生成了界面各个组件的类成员变量定义。在 public 部分为界面上每个组件定义了一个指针变量,变量的名称就是设置的相关控件的名称。比如,在窗体上放置了一个 QLabel 和一个 QPushButton 并命名后,自动生成的定义是:

QLabel*LabDemo;

QPushButton*btnClos;

3.定义了 setupUi() 函数,这个函数用于创建各个界面组件,并设置其位置、大小、文字内容、字体等属性,设置信号与槽的关联。setupUi() 函数体的第一部分是根据可视化设计的界面内容,用 C++ 代码创建界面上各组件,并设置其属性。
接下来,setupUi() 调用了函数 retranslateUi(Widget),用来设置界面各组件的文字内容属性,如标签的文字、按键的文字、窗体的标题等。将界面上的文字设置的内容独立出来作为一个函数 retranslateUi()。

setupUi()函数的第三部分是设置信号于槽的关联,本文件中有一下两行

QObject::connect(btnClose,SIGNAL(clicked()),Widget,SLOT(close()))
;
QMetaObject::connectSlotsByName(Widget);

第1 行是调用 connect() 函数,将在 UI 设计器里设置的信号与槽的关联转换为语句。这里是将 btnClose 按键的 clicked() 信号与窗体 Widget 的 close() 槽函数关联起来,就是在图 4 中设置的信号与槽的关联的程序语句实现。这样,当单击 btnClose 按钮时,就会执行 Widget 的 close() 槽函数,而 close() 槽函数的功能是关闭窗口。
第 2 行是设置槽函数的关联方式,用于将 UI 设计器自动生成的组件信号的槽函数与组件信号相关联。
所以,在Widget 的构造函数里调用 ui->setupUI(this),就实现了窗体上组件的创建、属性设置、信号与槽的关联。

定义 namespace Ui,并定义一个从Ui_Widget 继承的类Widget。

namespace Ui{
class Widget:public Ui Widget{}
}

ui_widget.h 文件里实现界面功能的类是 Ui_Widget。再定义一个类 Widget 从 Ui_Widget 继承而来,并定义在 namespace Ui 里,这样 Ui:: Widget 与 widget.h 里的类 Widget 同名,但是用 namespace 区分开来。所以,界面的 Ui:: Widget 类与文件 widget.h 里定义的 Widget 类实际上是两个类,但是设计的程序员对 Qt 的处理让用户感觉不到 Ui:: Widget 类的存在。

发布了8 篇原创文章 · 获赞 3 · 访问量 760

猜你喜欢

转载自blog.csdn.net/weixin_44984664/article/details/104560479