借鉴别人的讲解,与自己的理解,简单记录一下。
1.一个使用qmake构建系统的Qt项目,其组成结构为:
(1) 项目配置文件:*.pro
(2) 使用Qt C++编写的头文件和源程序文件
(3) 窗口UI文件。注意:纯代码编写模式下没有该文件。
(4) 资源文件。注意:无资源添加时,没有该文件。
2.Qt对标准C++语言的扩展:
(1) 引入了元对象系统(meta-object system, MOS),所有继承自QObject的类都可以利用元对象提供的功能。
(2) Qt同时提供了元对象编译器(MOC)。
在构建项目时,代码会先经由MOC进行编译,它会检查头文件中是否包含Q_OBJECT宏。如果包含,该文件会被预编译,生成另外一个moc_xxx.cpp的C++源文件,在该文件中Q_OBJECT宏将不在存在。这些经过预编译的源文件都被存放在项目的Debug或Release文件夹中。
提示,Q_OBJECT放到源文件中,编译会报错。
<1> .h文件中没有使用Q_OBJECT宏
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
class Widget : public QWidget
{
public:
Widget(QWidget *parent = nullptr);
~Widget();
};
#endif // WIDGET_H
编译后,Debug文件夹中没有中间文件。
<2> 在.h文件中添加Q_OBJECT宏之后。
3.在构建项目时,可视化设计的窗口UI文件会被用户界面编译器(UIC)转换为C++源程序文件,如:ui_widget.h
4.Qt中的资源文件会被资源编译器(RCC)转换为C++程序文件。如:res.qrc经编译后生成qrc_res.cpp文件。
5.标准C++编译器就是开发套件中的编译器。C++编译器会将MOC预编译后的文件进行若干处理、编译,最后生成可执行文件。
基本流程如下: