当我们新建一个Qt Application项目时,Qt会自动为我们完成所需信息的配置工作和基础代码的编写工作,整个项目的组织结构如图1.1所示。
Qt自动为我们将相关代码文件分为头文件、源文件和界面文件,并分别进行管理。其中头文件的.h文件和源文件中对应的.cpp文件完成了“相关类”的代码编写工作。源文件中的main.cpp是整个项目的运行基础,是第一个运行的文件。界面文件中的.ui文件记录了整个项目的GUI编辑情况,对GUI的设计即是对该.ui文件的修改。在一个Qt项目中以上这些相关代码文件都容易理解,唯独.pro需要特别注意,因为.pro文件是整个项目底层的环境配置文件。下面我会对.pro文件进行更加详细的分析和描述。
PRO文件
在Qt中,PRO文件标识了整个项目的依赖关系,Qt自带的工具qmake可根据PRO文件中记录的依赖关系自动生成适合不同平台的Makefile文件。本文中我打算针对与采用的案例密切相关的几个要素给出详细的分析和示例。如果想了解更多的PRO文件的配置参数信息可参考Qt pro文件解析。
books.pro文件的详细内容如下:
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = books
TEMPLATE = app
SOURCES += main.cpp\
dialog.cpp
HEADERS += dialog.h
FORMS += dialog.ui
在上述代码中,Qt行表示Qt使用的核心模块,core表示Qt内核,对应qtcore模块,几乎所有Qt程序都要添加该项;gui表示图形界面,对应qtgui模块,如果程序中使用了界面资源,则需要添加该项。这一行很少改动,如果需要改动,则大多加上
Qt += core gui network
表示使用Qt网络功能模块。其他可选选项包括core、gui、widgets、network、xml、quick、multimedia、webkit等。
第2行是进行版本控制,如果版本大于4,则使用widgets实现界面处理。这主要用于兼容旧版本Qt程序。
第3行是EXE程序输出的文件名,一般不做修改。
第4行表示程序类型,是比较重要的一行。app表示程序是一个应用程序,qmake编译器将根据它输出EXE格式的文件,可选值还包括lib,qmake生成一个DLL或静态lib;subdirs子目录项目;vcapp生成适合VC项目的文件,如.vcproj等。
第5行表示程序使用的代码文件,包括所有的CPP文件。
第7行是程序使用的头文件。
第8行表示使用的对话框界面资源。
不建议手动修改PRO文件,如果有需要则一般只修改Qt行来增加Qt模块。增加新的CPP文件或头文件时可直接在相应项目里新建添加,添加的结果也会自动反映到第5、第7行,不需要手动修改。另外一项需要手动修改的值是LIBS,它表示Qt程序使用到的第三方库,在Windows中是DLL文件。
Qt在编译项目时采用了“影子编译”的方式。之所以称为影子编译,是因为Qt将代码目录和编译后生成的目录进行分离,用户复制代码时可只将重要的代码分布存储,而编译产生的各种体积较大的临时文件则被分离出来。相比复制VC项目目录时要复制很多的临时编译文件,Qt影子编译选项实现了轻量化操作。另外,用户可单击图1.1左侧的“项目”按钮,进行编译选项的配置,其中可以直接修改构建目录地址。