1. Qt项目文件目录树
在 Qt Creator 中新建一个 Widget Application 项目 qt_demo2,在选择窗口基类的页面选择 QWidget 作为窗体基类,并选中“Generate form”复选框。创建后的项目文件目录树如下图所示。
现在来看编辑模式边栏的项目视图,点开头文件、源文件、界面文件三个虚拟目录,可以看到 widget.h 、main.cpp、widget.cpp 、widget.ui ,还有 qt_demo2.pro 项目文件,这个项目必要的代码文件就这五个,项目视图里三个目录是虚拟的,但这五个文件都是真实的。
- 项目管理文件 qt_demo2.pro,存储项目设置的文件。
- 主程序入口文件 main.cpp,实现 main()函数的程序文件。
- 窗体界面文件 widget.ui,一个 XML 格式存储的窗体上的元件及 其布局的文件。
- widget.h 是所设计的窗体类的头文件,widget.cpp 是 widget.h 里 定义类的实现文件。C++ 中,任何窗体或界面组件都是用类封装的,一个类一般有一个头文件(.h 文件)和一个源程序文件(.cpp 文件)。
2. 项目管理文件解析(.pro)
后缀为".pro"的文件是项目管理文件,双击打开项目管理文件,文件内容如下:
#-------------------------------------------------
#
# Project created by QtCreator 2020-09-23T16:06:11
#
#-------------------------------------------------
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = qt_demo2
TEMPLATE = app
# The following define makes your compiler emit warnings if you use
# any feature of Qt which has been marked as 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 you use 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
CONFIG += c++11
SOURCES += \
main.cpp \
widget.cpp
HEADERS += \
widget.h
FORMS += \
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
井号 # 打头的是注释,表明这个 pro 文件是由 QtCreator 创建的,QtCreator 创建的 pro 文件和 qmake 命令创建的 pro 文件有区别,而且 QtCreator 创建的 pro 文件兼容性更好,所以推荐是用 QtCreator 生成 Qt 项目并编辑和构建项目。
QT += core gui
这一句是为项目添加 core (QtCore,核心模块)和 gui (QtGui,基础绘图模块)两个 Qt 模块。core gui 是 Qt 用于 GUI 设计的类库模块,Qt 类库以模块的形式组织各种功能的类,根据项目涉及的功能需求,在项目中添加适当的类库模块支持。例如,如果项目中使用到了涉及数据库操作的类就需要用到 sql 模块,在 pro 文件中需要增加如下一行:
Qt +=sql
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
这句是个判断句法,如果 Qt 库的主版本号大于 4 ,比如 Qt5 ,那就添加新的 Qt 模块 widgets(QtWidgets,控件和窗口类模块),如果项目使用的是 Qt4,那么就不添加 widgets 模块。这句是为了兼容性而设计的,Qt4 时代,它的控件和窗口类集成在 gui 模块里,在 Qt5 才将 widgets 从 gui 里单独分离出来的。
TARGET = qt_demo2
TEMPLATE = app
TARGET 是指生成的目标程序名字,本项目生成的目标名字就是 qt_demo2 。TEMPLATE 是指项目生成模板,指明是生成应用程序 app 还是库文件 lib,还有其他类型的生成模板,不常用就不枚举了。
DEFINES += QT_DEPRECATED_WARNINGS
定义编译选项,QT_DEPRECATED_WARNINGS表示当Qt的某些功能被标记为过时的,那么编译器会发出警告。
CONFIG += c++11
使用C++11的标准进行编译。
后面的 SOURCES、HEADERS、FORMS 记录了项目中包含的源程序文件、头文件和窗体文件(.ui 文件)的名称。这些文件列表是 Qt Creator 自动添加到项目管理文件里面的,用户不需要手动修改。当添加一个文件到项目,或从项目里删除一个文件时,项目管理文件里的条目会自动修改。
3. 命令行编译Qt项目
随便写一段代码,保存为hello.cpp,并将其放入hello目录文件夹下。
#include<QApplication>
#include<QWidget>
int main(int argc,char ** argv)
{
QApplication app(argc,argv);
QLabel* label = new QLabel();
label->show();
return app.exec();
}
只需三行代码便可完成对Qt项目的编译:
qmake -project
执行完第一行代码后,会在hello文件夹下生成hello.pro。
qmake hello.pro
执行完第二行代码后,会在hello文件夹下生成一堆文件,最重要的是makefile文件。
make
第三行代码,mac和linux环境下用make,windows环境下是mingw32-make。此时执行make编译会报错,这是因为项目中用到了QWidget,所以要在.pro文件中加入QT += widgets
,再次make编译即可。经测试,mac环境下编译生成的可执行文件能够正常运行,但是windows环境下会报无法定位到xxx.dll的错误,对于这类错误,暂时还未解决。