Qt Creator以工程项目的方式对源代码进行管理,那么Qt项目文件里面具体有什么内容呢?
Qt项目包含不同类型的文件,介绍如下。
● .pro:项目描述文件,里面包含一些项目的描述信息,后面会进一步介绍。其本质就是Qt中的makefile文件。
● .pro.user:用户配置描述文件,这个文件是每个Qt项目自动产生的,每个用户的配置环境都不一样,所产生的配置描述文件也不一样,因此在进行跨平台开发的时候,必须删除这个文件,以免出现一些未知的错误。
● .h:头文件,项目所需的头文件。
● .cpp:源文件,项目所需的源文件。
● .ui:界面描述文件,描述界面的相关信息。
● 资源文件:程序中用到的图片、音频等文件。
Qt项目中有两个重要的文件:一个是源文件(main.cpp),该文件内容是项目主要的代码;一个是项目描述文件,用于对项目进行配置管理。下面来看一下这两个文件的主要内容。
main.cpp文件中包含了最重要的main()入口函数,函数形式如下。
1 #include "widget.h"
2 #include <QApplication>
3
4 int main(int argc, char *argv[])
5 {
6 QApplication a(argc, argv);
7 Widget w;
8 w.show();
9
10 return a.exec();
11
12 }
上述代码具体解释如下。
Qt系统提供的标准类名声明头文件没有扩展名.h,Qt中一个类对应一个头文件,类名就是头文件名。QApplication表示应用程序类,管理GUI应用程序的控制流和主要设置。它是Qt整个后台管理的“命脉”,包含主事件循环,完成来自窗口系统和其他资源的所有事件的处理和调度,也处理应用程序的初始化和结束,并且提供对话管理。
任何一个使用Qt的GUI应用程序都存在一个QApplication对象,且不论这个应用程序在同一时间内是不是有窗口或有多个窗口。
第6行代码创建了一个Qt的QApplication对象a,第7行代码创建了一个窗体对象w,第8行代码显示该窗体。
在第10行代码中,a.exec()表示进入消息循环,等待对用户输入进行响应。这里main()把控制权转交给Qt,Qt完成事件处理工作,当应用程序退出的时候,exec()的值就会返回。在exec()中,Qt接受并处理用户和系统的事件并把它们传递给适当的窗口部件。
.pro文件就是项目(Project)文件,是qmake自动生成的用于生成makefile的配置文件。使用Qt向导生成的应用程序.pro文件格式如下。
#项目描述文件
QT += core gui //包含的库
greaterThan(QT_MAJOR_VERSION,4): QT += widgets //高于Qt 4版本才包含widget模块
TARGET = QtFirst //应用程序名,生成的程序名称
TEMPLATE = app //模板类型,应用程序模板
SOURCES += main.cpp\ //源文件
mywidget.cpp
HEADERS += mywidget.h //头文件
CONFIG += c++11
.pro文件的详细解释如下。
(1)“#”开头的行为注释内容。
(2)QT +=core gui表示使用core和gui库,其实这也是Qt的默认设置。
(3)greaterThan(QT_MAJOR_VERSION,4):QT += widgets这条语句表示:如果QT_MAJOR_VERSION高于4(也就是当前使用的是Qt 5或更高版本)需要增加widget模块。如果项目仅需支持Qt 5,也可以直接添加“QT += widgets”一句。不过为了保持代码兼容,最好还是按照Qt Creator生成的语句编写。
(4)TARGET = QtFirst表示指定生成的应用程序名,并建立一个该应用程序的makefile。如果模板没有被指定,将使用默认值。QtFirst模板变量告诉qmake为这个应用程序生成哪种makefile。下面是可供使用的模板。
● Lib:建立一个库的makefile。
● vcapp:建立一个应用程序的VisualStudio项目文件。
● vclib:建立一个库的VisualStudio项目文件。
● subdirs:这是一个特殊的模板,可以创建一个能够进入特定目录,为一个项目文件生成makefile,并且为它调用make的makefile。
(5)项目中包含的源文件:
SOURCES += main.cpp
mywidget.cpp
(6)项目中包含的头文件:
HEADERS += mywidget.h
(7)配置信息,CONFIG用来告诉qmake关于应用程序的配置信息。
CONFIG += c++11 //使用c++11的特性
在这里使用“+=”,是因为要将配置选项添加到每一个已经存在的文件中。这样比使用“=”替换已经指定的所有选项更安全。