Qt 学习笔记:从环境搭建到工程构建的完整流程
本文系统梳理了从零开始学习Qt框架的核心脉络。从环境搭建入手,深入解析了Qt程序入口 main 函数的各组成部分(QApplication、事件循环、exec()),剖析了核心控件 QWidget 的构成与对象树机制,揭示了 .ui 文件的XML本质及Qt Designer的工作原理,并完整阐释了由 .pro 工程文件驱动的Qt项目构建链路。适合Qt初学者建立清晰的知识框架,也可作为速查手册。
本文记录了我从零开始学习 Qt 的核心知识点,包括开发环境、main 函数、Widget、UI 文件、本质机制,以及 Qt 项目构建流程。适合初学者阅读,也方便后续查阅。
一、Qt 环境搭建(基于 Qt SDK)
我使用的是 Qt SDK(Qt Creator + Qt 库),它已经集成了开发所需的环境,无需额外配置。
创建项目后,程序入口文件为:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
二、main 函数解析
1. argc / argv 的含义
argc:命令行参数个数
argv:参数列表
与 C、Linux 中完全一致。
2. QApplication a(argc, argv);
Qt 的 GUI 程序 必须 有一个 QApplication(或 QGuiApplication、QCoreApplication,取决于类型)。
作用:
管理应用程序生命周期
管理事件循环(Event Loop)
处理窗口系统交互
负责控件样式、字体、事件分派等
若没有它,Qt 界面程序无法正常运行。
3. Widget w / w.show()
Widget w;// 创建控件对象
w.show(); // 显示窗口
//w.hide();// 隐藏窗口
这里 Widget 是我们自定义的类,但它继承自 QWidget。
QWidget 是 Qt SDK 内置的控件基类,所有可视控件基本都从它派生。
4. Qt 的 exec() 和 Linux 的 exec() 的区别
Linux exec():进程替换
Linux 中的 exec() 属于系统调用,作用是:
用新的程序完全替换当前进程,不返回。
Qt 中的 exec():启动事件循环
Qt 中:
return a.exec();
它表示:
启动 Qt 的 事件循环(Event Loop)
GUI 程序从此刻开始进入消息处理阶段
鼠标、键盘、绘图等事件均在此循环中调度
两者完全不同,不要混淆。
三、Widget 类解析(widget.h)

1. #include
QWidget 是 Qt 内置控件基类,如果没有间接包含就必须手动 include。
Qt 的头文件命名规律:
类名 = 头文件名
例如 QWidget →
2. Q_OBJECT 宏
非常重要的宏!
Qt 中的 信号(signal)与槽(slot)机制要想启用,就需要引入这个宏
宏本质文本是展开,属于元对象系统(Meta-Object System)
没写它,信号/槽功能会失效
这个宏可以通过 Ctrl + 鼠标右键 展开看到大量生成代码。
3. 构造函数与对象树机制
Widget(QWidget *parent = nullptr);
Qt 提供 对象树(Object Tree) 机制:
当指定 parent 时,子对象会挂到父对象下
用于资源自动管理
避免内存泄漏
本质是一个 多叉树 结构
4. Ui::Widget ui
它负责管理 .ui 文件生成的界面元素。
与 Qt Designer 的 Form File(UI 文件)绑定
qmake 会根据 .ui 自动生成对应的 .h 文件
四、Widget 构造与 UI 加载(widget.cpp)

说明:
`ui 是自动生成的界面类
setupUi(this) 会将 UI 文件里的控件全部加载到窗口中
析构函数 delete ui 释放 UI 资源
五、UI 文件本质:XML 描述界面的结构
Qt Designer 中的 .ui 文件,本质上是:
一个 XML 文件,用标签描述界面结构。
示例(你可以点击 “编辑” 查看源码):

特点:
有什么标签,表示什么含义,都是程序员自己定义的,这个就类似于linux网络里学过的自定义应用层协议。这里的标签含义具体是什么,我们不需要过多关注,只需要知道ui文件本质上是xml即可。
qmake 会依据 XML 自动生成 C++ 代码
包括:ui_widget.h相关构建代码
从而把 XML 中的布局 & 控件转换为 C++ 对象。
六、Qt 工程文件(.pro)
这是 Qt 使用 qmake 构建的核心配置文件。
示例:
SOURCES +=
main.cpp
widget.cpp
HEADERS +=
widget.h
FORMS +=
widget.ui
含义:
SOURCES:参与编译的 .cpp
HEADERS:头文件
FORMS:UI 文件(qmake 会自动转换成 .h)
Qt Creator 会自动维护,不需要手动修改。
我们可以把 .pro 文件 ≈ Linux 的 Makefile
区别:
Makefile 需要程序员维护
Qt Creator 会自动帮我们维护 .pro
qmake 再自动生成 Makefile
七、构建目录(build-xxx-Desktop_xxx-Debug)
运行项目后会生成构建一个与项目目录并列的目录:
里面包含:
我们发现确实有makefile文件,这个就是qmake自动生成的
生成的empty应用程序,是与我们在qtsdk里运行的是一样的
总结
Qt 的构建链路是:
UI(XML) → qmake → 自动C++代码 → make → 可执行程序
核心知识点包括:
1.QApplication 管理事件循环
2.QWidget 是所有控件的基类
3.Q_OBJECT 宏启用信号与槽
4.UI 文件本质是 XML
5.qmake + .pro 文件共同构建工程
希望可以帮助到一起在学习qt的你!^ ^
更多推荐

所有评论(0)