跳转至

03-项目结构:构建系统与常见文件

目录页:见 Qt 教程目录

目标

  • 看懂一个 Qt 工程的“骨架”:源码、资源、构建脚本分别做什么
  • 分清 CMake 和 qmake:你到底在写什么文件
  • 会用最小改动让工程“多加一个源文件/资源文件”

先决知识(可选)

  • 能在 Qt Creator 创建并运行工程(见 02 章)

1. 构建系统:它决定“怎么编译、怎么链接”

  • 专业名称:Build System(构建系统)
  • 类比:菜谱,告诉厨师先切什么、用什么火、最后怎么摆盘
  • 作用:把你的源码、依赖库、编译选项组织起来,生成可执行文件
  • 规则/坑点:Qt 工程常见两种菜谱:CMake(新)和 qmake(老)

2. CMake vs qmake:新项目建议优先 CMake

2.1 CMake(更通用)

  • 专业名称:CMake(跨平台构建系统)
  • 类比:通用菜谱语言,不只做 Qt,也能做很多 C++ 工程
  • 作用:跨平台、生态好、和现代 IDE 配合更顺
  • 规则/坑点:你主要改 CMakeLists.txt

你会看到的典型文件:

  • CMakeLists.txt:构建脚本
  • main.cpp:程序入口
  • 可能还有 MainWindow.*.ui.qrc

2.2 qmake(老项目常见)

  • 专业名称:qmake(Qt 传统构建工具)
  • 类比:Qt 早期自带的菜谱格式
  • 作用:老项目兼容、很多教程还在用
  • 规则/坑点:你主要改 .pro 文件;新项目一般不再推荐从零开始用它

3. 你最常见会遇到的文件:它们分别干什么

3.1 main.cpp:程序从这里开始

  • 专业名称:Entry Point(入口)
  • 类比:开机按钮按下后第一步执行的那段流程
  • 作用:创建 QApplication、创建窗口、进入事件循环
  • 规则/坑点:GUI 程序要在 QApplication 后才创建大部分界面对象

3.2 .ui:用设计器做界面(可选)

  • 专业名称:Qt Designer UI Form(界面表单)
  • 类比:拖拽式“装修图纸”
  • 作用:快速搭界面,再用代码连接逻辑
  • 规则/坑点:.ui 会在构建时生成对应的 C++ 代码,你一般不直接改生成文件

3.3 .qrc:资源系统清单

  • 专业名称:Qt Resource System(Qt 资源系统)
  • 类比:把图片/字体/翻译文件打包进程序的“清单 + 行李箱”
  • 作用:发布时不需要额外拷贝资源文件,路径统一用 :/...
  • 规则/坑点:资源路径不是磁盘路径,是资源路径(见 06 章会详细讲)

4. 一个最小工程长什么样(用结构图认识)

你可以把一个简单 Widgets 工程想象成:

MyApp/
  CMakeLists.txt
  main.cpp
  MainWindow.h
  MainWindow.cpp
  MainWindow.ui
  resources.qrc

把它读成一句话: - CMakeLists:告诉“怎么编译” - main:程序入口 - MainWindow:你的主窗口代码 - ui:窗口布局图纸(可选) - qrc:把图片等资源打包(可选)


5. 你最常做的两件事:加源码、加资源

5.1 新增一个 .cpp/.h 文件

你新增一个 Foo.cpp/Foo.h 后,最重要的是让构建系统知道它存在:

  • CMake:把文件加入 target_sources(...) 或你已有的源文件列表
  • qmake:把文件加入 .pro 里的 SOURCES += / HEADERS +=

Qt Creator 里“Add New...”通常会自动帮你把它加进构建脚本,但你要知道它在背后改了哪里。

5.2 新增一个资源(例如图片)

你新增图片后,最重要的是把它加入 .qrc,这样 :/images/a.png 才能被程序找到(见 06 章)。


常见坑

  • 错误:新增了 .cpp,但忘了加到构建脚本
    结果:编译时找不到符号/文件根本没参与编译
    正确:确认 CMakeLists/.pro 里确实包含它(见 5.1)

  • 错误:把磁盘路径当成资源路径
    结果:发布后资源丢失
    正确:资源文件用 .qrc 打包,代码里用 :/...(见 06 章)


小练习

练习 1:加一个新类文件

  • 题目:新建一个 Greeter 类,提供 QString hello() 返回一句话
  • 输入/输出:运行程序后在窗口标题或控制台输出这句话
  • 约束:类文件必须是你自己新加的 .h/.cpp
  • 提示:新增文件后检查构建脚本是否包含
  • 目标:熟悉“新增文件→能编译进工程”

练习 2:加一张图到资源里

  • 题目:把一张 png 加进 .qrc,启动时设置为窗口图标
  • 输入/输出:窗口左上角图标变成你的图片
  • 约束:必须使用 :/... 资源路径
  • 提示:窗口图标常用 setWindowIcon(QIcon(":/..."))
  • 目标:建立“资源要进 qrc 才稳定”的习惯

小结

  • 构建系统决定“怎么编译链接”,Qt 常见 CMake(新)与 qmake(老)
  • main.cpp 是入口;.ui 是图纸;.qrc 是资源清单
  • 新增源码/资源要记得让构建系统“知道它存在”

下一篇:见 04-信号与槽-Qt的“事件连线”