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对象树]]