文章目录
- [1. 项目文件解析](#1. 项目文件解析)
-
- [1.1 .pro 文件解析](#1.1 .pro 文件解析)
- [1.2 widget.h 文件解析](#1.2 widget.h 文件解析)
- [1.3 main.cpp 文件解析](#1.3 main.cpp 文件解析)
- [1.4 widget.cpp 文件解析](#1.4 widget.cpp 文件解析)
- [1.5 widget.ui 文件解析](#1.5 widget.ui 文件解析)
1. 项目文件解析
1.1 .pro 文件解析
工程新建好之后,在工程目录列表中有一个后缀为 ".pro" 的文件, ".pro" 文件就是工程文件 (project) ,它是 qmake 自动生成的用于生产 makefile 的配置文件。如图所示:

双击进入该文件,该文件的内容如下:
makefile
QT += core gui # Qt包含的模块
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets # 大于Qt4版本才包含widget模块
CONFIG += c++11 # 启用C++11标准
# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \ # 源文件列表
main.cpp \
mylabel.cpp \
widget.cpp
HEADERS += \ # 头文件列表
mylabel.h \
widget.h
FORMS += \ # UI设计文件列表
widget.ui
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
还有两行在我的版本里没有,但是其他版本可能有:
makefile
TARGET = QtFirst # 应用程序名生成的.exe程序名称
TEMPLATE = app # 模板类型,应用程序模板
".pro" 文件的写法如下:
- 注释:从 "#" 开始,到这一行结束。
- QT += core gui // Qt 包含的模块 Qt5 包含的模块如下图所示:

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
这条语句的含义是,如果QT_MAJOR_VERSION
大于4
也就是当前使用的 Qt5 及更高版本) 需要增加widgets
模块。如果项目仅需支持 Qt5 , 也可以直接添加 "QT += widgets
" 一句。不过为了保持代码兼容 ,最好还是按照QtCreator
生成的语句编写。- 指定生成的应用程序名:
TARGET = QtDemo
TEMPLATE = app
//模板。告诉qmake
为这个应用程序生成哪种makefile
。下面是可供选择的模板:
app
:建立一个应用程序的makefile
。这是默认值,所以如果模板没有被指定,这个将被使用。lib
:建立一个库的makefile
。vcapp
:建立一个应用程序的VisualStudio
项目文件。vclib
: 建立一个库的VisualStudio
项目文件。subdirs
:这是一个特殊的模板,它可以创建一个能够进入特定目录的makefile
并且为它调用make
的makefile
。
- 工程中包含的源文件:
SOURCES += main.cpp/widget.cpp
- 工程中包含的头文件:
HEADERS += widget.h
- 工程中包含的资源文件:
RESOURCES += painter.qrc
- 工程中包含的 "ui" 设计文件:
FORMS += widget.ui
- 配置信息:
CONFIG += c++11
(使用 c++11 的特性)CONFIG
用来告诉qmake
关于应用程序的配置信息。
1.2 widget.h 文件解析
在Qt中,如果要使用信号与槽(signal 和 slot)的机制 就必须加入
Q_OBJECT
宏;
Ui::Widget *ui;
这个指针是用前面声明的namespace Ui
里的Widget
类定义的,所以指针ui
是指向可视化设计的界面,后面要访问界面上的组件,都需要通过这个指针ui
去访问。

1.3 main.cpp 文件解析
使用 Qt Creator 新建任意工程之后,main.cpp 文件中都会自动生成如下代码:

解释:
- Qt 系统提供的标准类名 声明头文件没有 .h 后缀;
- Qt 一个类对应一个头文件,类名 就是 头文件名;
QApplication
为应用程序类;QApplication a;
(a为应用程序对象,有且仅有一个。)QApplication
管理图形用户界面应用程序的控制流和主要设置。QApplication
是 Qt 的整个后台管理的命脉。它包含主事件循环,在其中来自窗口系统和其它资源的所有事件处理和调度。它也处理应用程序的初始化和结束,并且提供对话管理。- 对于任何一个使用 Qt 的图形用户界面应用程序,都正好存在一个
QApplication
对象,而不论这个应用程序在同一时间内是不是有 0、1、2 或更多个窗口。myWidget w;
//实例化窗口对象w.show();
//调用show函数显示窗口a.exec()
:程序进入消息循环,等待对用户输入进行响应。这里main()
把控制权转交给Qt,Qt 完成事件处理工作,当应用程序退出的时候 exec() 的值就会返回。在 exec() 中,Qt 接受并处理用户和系统的事件并且把它们传递给适当的窗口部件。
1.4 widget.cpp 文件解析
widget.cpp 文件是类 Widget 的实现代码,所有在窗体上要实现的功能添加在此文件中:

1.5 widget.ui 文件解析

widget.ui 是窗体界面定义文件,是一个 XML 文件,定义了窗口上的所有组件的属性设置、布局,及其信号与槽函数的关联等。用 UI 设计器可视化设计的界面都由 Qt 自动解析,并以 XML 文件的形式保存下来。在设计界面时,只需在 UI 设计器里进行可视化设计即可,而不用管 widget.ui 文件是怎么生成的。