--- title: Qt框架与项目结构 tags: - module - qt - project - joplin type: module source_type: reconstructed created: 2026-04-23 updated: 2026-04-23 --- # Qt框架与项目结构 > [!abstract] > 这一模块处理 Qt 程序“怎么开始”的问题,包括框架定位、项目文件、入口函数、资源系统以及构建工具切换。 ## 模块结论 - Qt 的核心价值是跨平台 GUI 框架,但真正支撑它的是对象模型、事件循环和统一构建组织。 - 一个最小 Qt 应用至少要有 `QApplication`、顶层窗口对象和事件循环 `exec()`。 - `.pro` 或 `CMakeLists.txt` 不只是构建脚本,而是对模块依赖、源文件、资源和目标产物的声明。 - 资源文件 `qrc` 的作用是把图片等静态资源纳入应用内部引用体系,避免依赖外部散落路径。 ## 一、Qt 的框架定位 - Qt 面向桌面 GUI,但也覆盖跨平台应用开发、资源管理、事件处理和文件系统接口。 - “跨平台”不是自动成立的,它依赖统一 API、模块声明和平台适配层。 - 对复习来说,Qt 不应只记“能做界面”,而要记“它如何统一窗口、事件、资源和构建”。 ## 二、项目创建后最值得先看什么 - 入口文件 `main.cpp` - 顶层窗口类 - 项目文件:`.pro` 或 `CMakeLists.txt` - 资源文件:`.qrc` ### 最小程序主线 - 构造 `QApplication` - 创建窗口对象 - 调用 `show()` - 进入 `a.exec()` 这里的关键不是代码行数少,而是 `QApplication` 持有主事件循环。没有它,界面对象就只是普通 C++ 对象,不会进入交互状态。 ## 三、`.pro` 文件在做什么 - 声明 Qt 模块,例如 `core`、`gui`、`widgets` - 指定目标名 `TARGET` - 指定模板 `TEMPLATE` - 注册源文件、头文件、表单文件和资源文件 - 补充编译配置,例如 `CONFIG += c++11` ### 复习抓手 - `QT += widgets`:当前项目需要窗口控件支持 - `SOURCES/HEADERS/FORMS/RESOURCES`:把工程内容显式交给构建系统 - `greaterThan(QT_MAJOR_VERSION, 4)`:体现 Qt4/Qt5 兼容思路 ## 四、资源系统的意义 - 资源文件通过 `:/` 路径访问图片、图标、动画等静态资源。 - 这样做的好处是部署简单,路径稳定,代码中不必依赖外部绝对路径。 - 对界面程序来说,图标、菜单、工具栏按钮往往都依赖资源系统。 ## 五、从 qmake 到 CMake 应该怎样理解 - 不要把迁移理解成“旧语法改新语法”。 - 真正需要映射的是: - 模块依赖 - 目标类型 - 源文件集合 - 资源文件 - 自动生成机制,例如 `AUTOMOC`、`AUTOUIC`、`AUTORCC` ### 迁移时最容易漏的点 - 忘记声明 `Widgets` 等模块 - 漏掉 `qrc` 资源 - 忽略 `moc`、`uic` 自动处理 - 只迁移构建文件,不检查目录结构和输出目标 ## 六、易错点 - 把 `exec()` 理解成普通函数调用,而不是事件循环入口。 - 只知道 `.pro` 是工程文件,不知道它决定了模块和源文件是否被真正编译。 - 直接在代码里写外部图片路径,而不使用资源系统。 - 迁移到 CMake 时只追求“能编过”,忽略项目结构是否清晰。 ## 七、复习提问 - `QApplication` 为什么是 GUI 程序的入口核心? - `.pro` 与 `CMakeLists.txt` 的共同职责是什么? - 为什么 `qrc` 资源系统对 GUI 项目比普通命令行程序更重要? ## 来源 - [[raw/Joplin/编程学习项目/使用Qt和C++构造UI界面/1. Qt概述.md]] - [[raw/Joplin/编程学习项目/使用Qt和C++构造UI界面/2. 创建Qt项目.md]] - [[raw/Joplin/编程学习项目/使用Qt和C++构造UI界面/3. 第一个Qt小程序.md]] - [[raw/Joplin/编程学习项目/使用Qt和C++构造UI界面/附录1 从 QMake 迁移到 CMake 详细记录.md]] - [[raw/Joplin/编程学习项目/使用Qt和C++构造UI界面/附录2 CMake 模板.md]] ## 相关页面 - [[Qt]] - [[QMake与CMake迁移]] - [[Qt对象树]]