本文记录了我从零开始学习 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的你!^ ^

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐