目标:对于功能模块较多的Qt项目,使用pri文件管理模块文件,降低工程复杂度,提高软件模块的封装性和重用性。
一、知识储备
1.1 pro与pri文件
对于模块化编程,Qt提供了pro和pri,pro管理项目,pri管理模块。
.pro 文件是Qt项目的主配置文件,用于描述整个项目的基本信息和编译配置。
.pri 文件是包含在 .pro 文件中的辅助文件,用于组织和管理项目中的共享代码、配置选项和编译规则。
使用pri将项目划分成子模块后,各个模块的相关内容,移动到各自的pri文件,实现解耦,便于管理。
.pro 文件(项目文件)
作用: .pro 文件是Qt项目的主项目文件,用于描述项目的基本信息、依赖关系、编译配置等。
内容: 在 .pro 文件中,可设置项目的名称、版本号、编译选项、包含的源文件、依赖的库文件等信息。
示例: 一个简单的 .pro 文件可能包含以下内容:
# 指定生成的应用程序名
TARGET = MyProject
# 生成应用程序,即可执行文件
TEMPLATE = app
# 生成库文件
TEMPLATE = lib
# 版本号
VERSION = 1.0
# 源文件
SOURCES += main.cpp \widget.cpp
# 头文件
HEADERS += widget.h
# 链接的库
LIBS += -lmylibrary
# 包含.pri 文件
include(file.pri)
# 程序编译时依赖的相关路径
DEPENDPATH += . forms include qrc sources
# 头文件包含路径
INCLUDEPATH += .
# 工程中包含的头文件
HEADERS += include/painter.h
# 工程中包含的.ui设计文件
FORMS += forms/painter.ui
# 工程中包含的源文件
SOURCES += sources/main.cpp sources/painter.cpp
# 工程中包含的资源文件
RESOURCES += qrc/painter.qrc
.pri 文件(包含文件)
作用: .pri 文件用于包含在 .pro 文件中,可组织和管理项目中的共享代码、配置选项和编译规则。
内容: 通常,.pri 文件包含一组变量定义、函数定义、条件语句等,用于封装特定的功能或配置选项。
示例: 一个简单的 .pri 文件可能包含以下内容:
# 定义编译选项
DEFINES += USE_FEATURE_X
# 包含其他的 .pri 文件
include(anotherfile.pri)
# 添加源文件
SOURCES += additional.cpp
# 添加头文件
HEADERS += additional.h
使用: 在 .pro 文件中,通过 include 指令可以引入 .pri 文件,从而将其内容合并到项目中,使得项目的管理更加灵活和模块化。
pro文件的配置项
#:注释
CONFIG:项目配置项
DEFINES:添加变量,作为预处理宏
DEPENDPATH:依赖关系
DESTDIR:指定目标文件的位置
FORMS:指定UI文件
HEADERS:指定头文件
INCLUDEPATH:包含目录
LIBS:指定链接库
MOC_DIR:指定来自moc所有中间文件放置的目录
OBJECTS_DIR:指定所有中间文件.o(.obj)放置的目录
QT:指定项目中使用Qt的模块
RCC_DIR:指定Qt资源编译器输出文件的目录(.qrc文件转换成qrc_*.h文件的存放目录)
RESOURCES:指定资源文件 (qrc)
RC_ICONS:仅适用于Windows,指定的图标应该包含在一个生成的.rc文件里
SOURCE:指定所有源文件
TARGET:指定目标文件名称
TEMPLATE:模板变量告诉qmake为这个应用程序生成哪种makefile
TRANSLATIONS:指定翻译文件
pri的配置项
.pri(.pro,project include)可以看成是.pro文件的子集,里面的内容大致和.pro是一样的。
二、示例
开发工具:Qt Creator
假设工程为单项目多模块,有3个功能模块:subPro1、subPro2、subPro3
不同功能模块放到不同源文件,所有配置信息集中到pro文件,会导致pro文件过于复杂,难以维护
使用pri文件管理源文件,减轻pro文件负担,降低工程复杂度
1,将主界面文件放到单独文件夹,删除pro文件中的文件包含模块文件的配置信息
2,新建子文件夹subPro1,新建子文件subPro1.txt,修改文件后缀为subPro1.pri
3,在pro文件中添加pri文件
INCLUDEPATH += $$PWD/subPro1
include($$PWD/subPro1/subPro1.pri)
4,修改subPro1.pri文件,加入源文件路径
选择subPro1图标,右键->添加现有文件,选择需要加入到subPro1.pri文件的源文件
5,继续操作subPro2、subPro3模块
每个模块的相关文件都放入各自的模块结构中,整个工程结构更清晰,便于维护。
示例下载
https://download.csdn.net/download/VistaTech/89532802
参考资料
Qt 项目文件Pri详解_qt pri文件-CSDN博客
Qt Pri多模块 - 三淼 - 博客园 (cnblogs.com)
【Qt】使用pri管理项目中的子模块-Qt-Qt未来工程师 (qtfuture.cn)
Qt中pro、pri文件的语法介绍_qtprpyurqoyqtprpyurqoy-CSDN博客
Qt开发之路--模块化设计.pri文件_qt_宁静致远2021-开放原子开发者工作坊 (csdn.net)