Qt基础之子工程pri的使用:子工程中的widget类如何在其他地方提升使用

本文介绍了Qt开发中如何使用pri子工程进行项目管理,以提高工作效率。通过创建pri文件并将其添加到工程pro文件中,可以方便地组织和管理类文件。同时,讲解了如何在主工程中提升使用pri子工程中的widget类,提供了一个清晰的步骤指南。正确使用pri有助于在大型项目中保持代码的整洁和模块化。

Qt基础之子工程pri的使用:子工程中的widget类如何在其他地方提升使用

概要

如果真的要用Qt开发实际的工程,到了中后期,会发现自己亲手建的h、cpp还有ui文件会让你眼花缭乱,为了找个cpp文件费半天劲,效率非常低。
想要解决这个问题,将其分成若干的pro封装成动态库又有些大动干戈,并不划算。
所以Qt Creator很贴心的推出了子工程pri,让你可以在在同一个pro工程里很方便的分类管理你的类。
具体的使用方法,我用一个小例子来讲解,希望对于刚刚使用Qt进行开发的朋友有帮助.

pri文件的创建和使用

首先建立一个Qt Widgets Application,之所以选择这种类型的工程,是因为我还想在后面讲一下如何来提升使用pri子工程中的widget类。在这里插入图片描述
新工程建好后,我们在其目录下新建一个文件夹用来存储pir和其所管理的文件,我取名pir_demo_path,其实也可以直接在根目录下建立pir,但是个人觉得既然要建子工程,物理上也应该进行“隔离”,这样才能做到泾渭分明,再大的工程也不会乱。
文件夹建好以后,在里面新建一个txt文件,然后将其改为后缀为pri的文件,我取名叫pri_demo_department,记住,一定要连着后缀名一起改,否则Qt Creator不会认的。如果看不到txt后缀,把文件夹选项里的“隐藏已知后缀“勾掉。在这里插入图片描述
pri文件创建好了,我们在我们的工程的pro文件加入这样一句话,然后保存,发现变化了吗?没错,文件列表出现了一个名为pri_demo_department文件夹,我们的子工程建好了。

<think>我们正在使用CMake构建Qt项目,用户询问如何自动添加.c和.h文件(似qmake的.pri文件功能)。 在CMake中,通常使用`target_sources()`和`target_include_directories()`来添加源文件和头文件。 但是,用户希望用似.pri的方式来自动添加,即通过包含一个文件来添加多个源文件和头文件。 解决方案: 1. 创建一个.cmake文件(例如`my_sources.cmake`),在其中定义变量或直接添加源文件和头文件路径。 2. 在主CMakeLists.txt中通过`include()`命令包含这个文件,然后使用这些变量或添加的路径。 注意:CMake中不能直接使用.pri文件,需要转换。 示例步骤: - 在项目根目录创建`my_sources.cmake`文件,列出源文件和头文件。 - 在`my_sources.cmake`中,可以设置一个变量,例如`MY_SOURCES`和`MY_HEADERS`,包含文件列表。 - 在主`CMakeLists.txt`中,包含这个文件,然后将这些文件添加到目标。 另一种方式:使用`file(GLOB ...)`命令在.cmake文件中收集文件,但要注意GLOB的缺点(CMake官方不推荐,因为新添加文件不会自动重新生成构建系统)。 但是,用户要求“自动添加”,可能指自动收集文件,所以这里给出两种方式(变量列表和GLOB)的示例。 示例代码: 方式1:显式列出文件(推荐,因为可靠) ```cmake # 文件:my_sources.cmake set(MY_SOURCES src/main.cpp src/widget.cpp ) set(MY_HEADERS include/widget.h ) ``` 方式2:使用GLOB(不推荐,但有时方便) ```cmake # 文件:my_sources.cmake file(GLOB MY_SOURCES "src/*.cpp") file(GLOB MY_HEADERS "include/*.h") ``` 主`CMakeLists.txt`: ```cmake cmake_minimum_required(VERSION 3.16) project(MyProject) # 包含Qt find_package(Qt6 COMPONENTS Widgets REQUIRED) # 包含自定义的.cmake文件 include(my_sources.cmake) # 创建可执行文件 add_executable(my_app ${MY_SOURCES} ${MY_HEADERS}) # 设置头文件包含目录 target_include_directories(my_app PRIVATE include) # 链接Qt库 target_link_libraries(my_app PRIVATE Qt6::Widgets) ``` 注意:如果使用GLOB,每次添加新文件后需要重新运行CMake(手动重新生成构建系统)。 用户问题中要求“自动添加”,所以这里两种方式都可以,但更推荐显式列出。 注意事项: - 确保路径正确,相对路径相对于CMakeLists.txt所在目录。 - 如果文件分布在多个目录,可以设置多个变量,或者使用`aux_source_directory()`(同样有GLOB的缺点)。 回答完毕后,必须提出3-5个相关问题,以“§§相关问题§§”开头,然后列出问题。 </think>在Qt项目的CMake构建中,无法直接使用.qmake的`.pri`文件格式添加源文件,但可以通过创建`.cmake`包含文件实现似功能。以下是完整解决方案: ### CMake自动添加源文件步骤 1. **创建`.cmake`包含文件** 新建文件(如`sources.cmake`),使用以下方式之一添加文件: ```cmake # 方式1:显式文件列表(推荐) set(MY_SOURCES src/main.cpp src/widget.cpp lib/utils.c ) set(MY_HEADERS include/widget.h include/utils.h ) # 方式2:通配符自动收集(需谨慎) file(GLOB_RECURSE AUTO_SOURCES "src/*.cpp" "lib/*.c") file(GLOB_RECURSE AUTO_HEADERS "include/*.h") ``` 2. **主CMakeLists.txt配置** ```cmake cmake_minimum_required(VERSION 3.16) project(MyQtApp) # 包含Qt核心模块 find_package(Qt6 COMPONENTS Core Widgets REQUIRED) # 包含自定义源文件配置 include(sources.cmake) # 自动注入源文件 # 创建可执行文件(使用显式列表更安全) add_executable(${PROJECT_NAME} ${MY_SOURCES} ${MY_HEADERS} # ${AUTO_SOURCES} ${AUTO_HEADERS} # 若使用通配符 ) # 设置头文件包含路径 target_include_directories(${PROJECT_NAME} PRIVATE include) # 链接Qt库 target_link_libraries(${PROJECT_NAME} PRIVATE Qt6::Core Qt6::Widgets) ``` ### 关键注意事项 - **通配符风险** `file(GLOB)`不会自动检测新增文件,需手动重新运行CMake(添加`CONFIGURE_DEPENDS`可缓解但非完全可靠) - **目录结构规范** 推荐保持标准结构: ``` project/ ├── CMakeLists.txt ├── sources.cmake # 文件包含配置 ├── src/ # .cpp/.c源文件 ├── include/ # .h头文件 └── lib/ # 第三方源文件 ``` - **Qt特殊处理** 对于Qt的元对象编译(moc),确保头文件包含`Q_OBJECT`宏: ```cmake # 启用自动moc set(CMAKE_AUTOMOC ON) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值