
🎬 个人主页 :道尔柯南
❄专栏传送门 :《C语言》《C++》《Linux操作系统》
昙花一现,却等待了整个白昼;蝉鸣一夏,却蛰伏了好几个四季。 @TOC(文章目录) 摘要: Qt 是一个基于 C++ 的跨平台图形用户界面应用程序框架。它提供了丰富的组件、工具和开发环境,可以帮助开发者快速构建桌面、移动以及嵌入式应用程序。本文将从 Qt 的基本概念出发,介绍 Qt 的发展历程、应用场景、开发环境搭建、Qt Creator 的使用、项目结构以及 Qt 对象模型,为初学者建立完整的 Qt 开发知识体系。
一、什么是 Qt?
在学习 Qt 之前,我们首先需要理解一个概念:GUI(Graphical User Interface,图形用户界面)。
我们平时使用的 Windows、Linux、macOS 等操作系统,以及各种桌面软件,通常都提供了窗口、按钮、输入框、菜单等图形化组件。用户可以通过鼠标、键盘等方式与这些组件进行交互。
Qt 就是用于开发这类图形用户界面应用程序的重要工具之一。
Qt 是一个跨平台的 C++ 图形用户界面应用程序框架。它采用面向对象的设计思想,并提供了大量可以直接使用的类和组件。开发者既可以通过可视化方式设计界面,也可以使用 C++ 编写具体的业务逻辑。
简单来说:
Qt = C++ + GUI + 跨平台 + 丰富的开发工具
这也是 Qt 最核心的特点。
例如,同一套 Qt 程序经过适当的构建配置后,可以运行在 Windows、Linux、macOS 等不同平台上,从而减少开发者针对不同操作系统重复开发的工作量。
二、Qt 的发展历程
Qt 并不是一个新兴框架,它已经经历了较长的发展过程。
- 1991 年:Qt 最早由奇趣科技开发;
- 1996 年:Qt 进入商业领域,同时成为 Linux 桌面环境 KDE 的基础;
- 2008 年:奇趣科技被诺基亚收购;
- 2012 年:Qt 被 Digia 收购;
- 2014 年:Qt Creator 3.1.0 发布,同年 Qt 5.3 正式发布,并进一步完善了对 iOS、Android、Embedded 等平台的支持。
Qt 的发展过程也体现了一个重要特点:
跨平台能力一直是 Qt 的核心竞争力之一。
从传统桌面应用到移动端,再到嵌入式设备,Qt 的应用范围不断扩大。
三、Qt 支持哪些平台?
Qt 最大的特点之一就是跨平台。
Qt 支持多个平台,包括:
- Windows
- Linux / Unix
- macOS
- Embedded
- Android
因此,开发者可以使用 Qt 构建不同平台上的应用程序。
这种跨平台能力对于企业开发来说非常重要。
假设一个企业需要开发一套桌面管理软件,如果没有跨平台框架,可能需要分别针对 Windows、Linux 和 macOS 编写不同版本。
而使用 Qt 后,可以尽可能复用核心代码,从而提高开发效率。
四、Qt 有什么优势?
Qt 为什么能够长期应用于软件开发领域?
可以从以下几个方面理解。
4.1 跨平台
Qt 可以支持多个操作系统和设备平台。
这意味着开发者不需要完全针对某一个操作系统重新学习一套 GUI 开发方式。
4.2 面向对象
Qt 大量使用 C++ 面向对象的设计思想。
窗口、按钮、标签等 GUI 元素都可以看成对象。
开发者通过创建对象、设置对象属性以及处理对象之间的关系,就可以构建完整的应用程序。
4.3 开发效率高
Qt 提供了大量现成的类和控件,同时 Qt Creator 还提供可视化界面设计能力。
开发者可以直接拖拽按钮、标签等控件到窗口中,然后设置相应属性。
因此,相比完全手写 GUI,Qt 能够明显提高开发效率。
4.4 适合嵌入式开发
Qt 不仅可以用于传统桌面应用,还可以用于嵌入式设备。
例如:
- 机顶盒
- 车载娱乐系统
- 安防监控设备
- 智能设备
五、Qt 的典型应用场景
Qt 的应用范围比较广。
5.1 桌面应用
Qt 可以用于开发:
- 文件管理器
- 媒体播放器
- 绘图程序
- 办公软件
- 工具软件
并且可以面向 Windows、Linux、macOS 等桌面平台。
5.2 移动应用
Qt 也支持 Android 和 iOS。
开发者可以利用 Qt 的跨平台能力构建移动应用,例如社交、游戏和娱乐类应用。
5.3 嵌入式系统
Qt 在嵌入式领域也有较广泛的应用。
特别是在需要图形界面的设备中,Qt 可以承担用户界面开发工作。
六、Qt 的一些典型应用
列举了一些 Qt 的成功案例,包括:
- Linux 桌面环境 KDE
- WPS Office
- Skype
- Google Earth
- VLC
- VirtualBox
这些案例可以帮助我们直观理解 Qt 的实际应用范围。
也就是说,Qt 并不仅仅是一个用于学习 GUI 的教学框架,而是一套可以应用于实际软件开发的技术体系。
七、Qt 5 和 Qt 6 怎么选择?
目前 Qt 已经发展到 Qt 6。
不过Qt 6 与 Qt 5 在核心功能方面区别并没有完全颠覆,同时企业中仍然存在大量 Qt 5 项目,因此博客仍然以 Qt 5 为主要学习版本。
对于初学者来说,这里需要建立一个正确认识:
学习 Qt 的重点不是死记某一个版本,而是掌握 Qt 的核心编程思想和开发方式。
例如:
- Qt 对象模型
- GUI 控件
- 信号与槽
- 项目结构
- 事件循环
- UI 设计
- 内存管理
这些知识才是后续学习的基础。
八、Qt 开发环境怎么搭建?
开始编写 Qt 程序之前,需要准备开发环境。
介绍一些 Qt 常见的开发工具:
- Qt Creator
- Visual Studio
- Eclipse
其中,后续本博客主要使用 Qt Creator 进行开发。
8.1 什么是 Qt Creator?
Qt Creator 是专门面向 Qt 开发的跨平台集成开发环境。
它提供了:
- 代码编辑器
- 智能提示
- 自动补全
- 调试器
- 可视化 UI 设计器
- 构建工具
- 项目管理
- 版本控制支持
因此,对于 Qt 初学者来说,Qt Creator 是非常合适的开发工具。
九、Qt SDK 的安装
博客以 Qt 5.14.2 为例介绍了 Qt SDK 的安装过程。
安装过程中需要特别注意几个问题。
9.1 安装路径不要使用中文
课件特别强调:
Qt 安装路径不能出现中文路径。
否则可能导致安装完成后无法正常使用。
因此,在安装 Qt 时建议使用类似:
text
C:\Qt\
这样的英文路径。
9.2 选择需要安装的组件
如果磁盘空间允许,可以选择较完整的组件。
如果磁盘空间有限,也可以只选择当前开发需要的组件,后续再根据需求补充。
十、如何验证 Qt 是否安装成功?
安装完成之后,可以打开 Qt Creator。
进入欢迎模式中的"示例"页面,选择一个 Qt 自带的示例项目,然后尝试构建和运行。
如果示例程序能够正常构建并运行,则说明 Qt 开发环境基本安装成功。
这个验证过程非常重要。
因为"安装完成"并不一定意味着"开发环境已经正确配置"。
真正能够成功编译、运行 Qt 程序,才说明整个环境基本可用。
十一、为什么需要配置环境变量?
Windows 中的环境变量可以理解为操作系统提供给程序使用的一组环境信息。
其中最常见的就是 PATH。
当我们在命令行中执行某个程序时,如果没有指定完整路径,系统就会根据 PATH 中配置的目录寻找对应程序。
Qt 的相关工具也可以通过这种方式被系统找到。
因此,在某些开发环境中,需要将 Qt 的 bin 目录加入环境变量。
十二、认识 Qt Creator 的界面
打开 Qt Creator 后,可以看到一个完整的集成开发环境。
它主要包含:
- 菜单栏
- 模式选择区域
- 构建套件选择器
- 项目窗口
- 编辑器
- 输出窗口
- 项目管理区域
Qt Creator 提供了多个工作模式,包括:
欢迎模式
用于:
- 打开项目
- 新建项目
- 查看示例
- 查看教程
- 打开历史项目
编辑模式
主要用于:
- 编写代码
- 修改代码
- 管理项目文件
- 查看类和函数
设计模式
用于可视化设计 GUI。
可以通过拖拽控件来构建窗口。
调试模式
用于:
- 设置断点
- 单步执行
- 查看变量
- 调试程序
十三、如何创建第一个 Qt 项目?
使用 Qt Creator 创建项目非常简单。
可以选择:
文件 → 新建文件或项目
或者直接使用快捷键:
text
Ctrl + N
之后选择项目模板。
常见模板包括:
- Qt Widgets Application
- Qt Console Application
- Qt Quick Application
其中,对于传统桌面 GUI 开发来说,最常使用的是:
Qt Widgets Application
Application 是最常使用的一类项目模板。
十四、Qt 项目的构建系统
创建 Qt 项目时,需要选择构建系统。
介绍三种:
- qmake
- CMake
- Qbs
其中后续博客中使用默认的 qmake。
qmake
qmake 是 Qt 项目常用的构建工具,它会根据 .pro 项目文件生成 Makefile。
例如:
text
QtDemo.pro
就是一个典型的 qmake 项目文件。
CMake
CMake 是一种跨平台构建工具,可以生成不同平台所需要的构建文件。
Qbs
Qbs 也是 Qt 相关的构建工具,不过 Qt 官方已经因为市场原因弃用 Qbs,并且 qmake 仍然是常见的构建方式。
十五、Qt 中常见的窗口基类
创建项目时,我们还需要选择窗口的基类。
介绍了三个比较重要的类:
QMainWindow
适合比较复杂的主窗口程序。
它可以包含:
- 菜单栏
- 工具栏
- 状态栏
- 中央区域
- 可停靠窗口
QWidget
最基本的窗口组件。
很多简单的 GUI 程序都可以基于 QWidget 实现。
QDialog
主要用于对话框。
例如:
- 登录窗口
- 设置窗口
- 提示窗口
- 弹窗
QDialog 本身继承自 QWidget。
十六、Qt 中的 Kit 是什么?
在创建项目时,还需要选择 Qt Kit。
Qt Kit 可以理解成:
Qt 程序从编译、链接到运行所需要的一整套工具和 Qt 类库。
以 MinGW 版本为例,它至少涉及:
- C++ 编译器
- 链接器
- 基础库
- 调试器
- Qt 类库
博客中的示例使用:
text
Desktop Qt 5.14.2 MinGW 64-bit
作为开发套件。
十七、Qt Hello World:第一个 GUI 程序
学习任何一种编程框架,通常都会从 Hello World 开始。
Qt 也不例外。
在 Qt 中,我们可以通过两种方式创建简单的 GUI:
方式一:纯代码
通过 C++ 创建按钮、标签等控件,然后设置其属性。
方式二:可视化设计
双击:
text
widget.ui
进入 UI 设计界面。
然后从控件列表中拖拽按钮、标签等控件到窗口中,再修改相应属性。
这种方式可以明显降低 GUI 界面开发的复杂度。
十八、Qt 项目文件结构
一个 Qt Widgets 项目通常会看到一些非常重要的文件。
例如:
text
QtDemo/
├── QtDemo.pro
├── main.cpp
├── widget.h
├── widget.cpp
└── widget.ui
理解这些文件,是学习 Qt 的关键一步。
十九、.pro 文件
.pro 是 Qt 项目的工程文件。
它主要用于描述:
- 项目使用哪些 Qt 模块
- 项目名称
- 源文件
- 头文件
- UI 文件
- 资源文件
- 编译配置
例如:
text
QT += core gui
表示项目使用 Qt 的相关模块。
还可以看到:
text
TARGET = QtDemo
表示最终生成的应用程序名称。
例如:
text
SOURCES += main.cpp \
widget.cpp
HEADERS += widget.h
用于指定项目中的源文件和头文件。
二十、main.cpp:Qt 程序从哪里开始?
Qt 程序和普通 C++ 程序一样,也从:
cpp
main()
开始执行。
Qt GUI 程序通常会创建一个:
cpp
QApplication
对象。
它负责管理 GUI 应用程序的控制流和主要设置,同时维护程序的事件循环。
程序中还会创建窗口对象:
cpp
myWidget w;
然后:
cpp
w.show();
显示窗口。
最后:
cpp
a.exec();
进入 Qt 的事件循环。
可以把它简单理解为:
text
创建应用程序
↓
创建窗口
↓
显示窗口
↓
进入事件循环
↓
等待用户操作
这就是一个 Qt GUI 程序最基本的运行过程。
二十一、什么是事件循环?
GUI 程序与普通控制台程序最大的区别之一,就是它需要持续等待用户操作。
例如用户:
- 点击按钮
- 移动鼠标
- 输入文字
- 关闭窗口
- 调整窗口大小
这些操作都会产生事件。
Qt 通过事件循环不断接收和处理这些事件。
因此:
cpp
a.exec();
并不是简单地"让程序停在这里"。
而是把程序的控制权交给 Qt,让 Qt 持续处理用户和系统产生的各种事件。
二十二、widget.h、widget.cpp 和 widget.ui
widget.h
头文件主要用于声明 Widget 类。
如果使用 Qt 的信号与槽机制,通常需要在类中加入:
cpp
Q_OBJECT
同时:
cpp
Ui::Widget *ui;
用于保存指向 UI 界面的指针。
widget.cpp
这是 Widget 类的实现文件。
我们通常会在这里编写窗口相关的功能代码。
widget.ui
这是非常有特色的 Qt 文件。
它实际上是一个 XML 文件,用于保存:
- 窗口组件
- 组件属性
- 布局
- UI 相关设置
我们在 Qt Designer 中拖拽控件时,Qt 会自动维护这个文件。
因此开发者通常不需要手动修改 .ui 文件。
二十三、Qt 的对象模型
Qt 最值得学习的知识之一,就是它的对象模型。
Qt 中大量对象都是基于:
text
QObject
组织起来的。
Qt 使用一种**对象树(Object Tree)**的方式管理对象之间的父子关系。
例如:
text
Window
├── Button
├── Label
└── TextEdit
Window 是父对象,Button、Label、TextEdit 是子对象。
二十四、对象树有什么用?
对象树最大的作用之一就是帮助管理对象生命周期。
当一个父对象被销毁时,它的子对象也会随之被销毁。
例如:
text
MainWindow
↓
Dialog
↓
Button
当 Dialog 被销毁时,它内部的 Button 也可以自动被释放。
这种机制在 GUI 程序中非常有用,可以减少开发者手动管理内存的负担。
二十五、Qt 对象树使用时需要注意什么?
虽然 Qt 的对象树能够帮助管理内存,但它并不意味着我们可以完全忽略 C++ 的生命周期规则。
特别是在对象创建于栈上的情况下,如果父子对象的析构顺序处理不当,可能出现重复析构问题,甚至导致程序崩溃。
因此实践建议是:
在 Qt 中,尽量在构造对象时指定 parent,并合理使用堆对象。
这也是学习 Qt 对象模型时需要重点理解的内容。
二十六、Qt 的窗口坐标体系
Qt 中的窗口坐标体系也非常容易理解。
默认情况下:
text
(0,0) ─────────→ X
│
│
│
↓
Y
也就是说:
- 左上角是
(0, 0) - X 轴向右增加
- Y 轴向下增加
对于嵌套窗口来说,子窗口的坐标通常是相对于父窗口建立的。
这套坐标体系对于后续学习控件位置、窗口布局和绘图都非常重要。
二十七、Qt Creator 常用快捷键
熟练使用 IDE 可以明显提高开发效率。
常用快捷键:
| 功能 | 快捷键 |
|---|---|
| 注释 | Ctrl + / |
| 运行 | Ctrl + R |
| 编译 | Ctrl + B |
| 查找 | Ctrl + F |
| 帮助文档 | F1 |
| 自动对齐 | Ctrl + I |
.h/.cpp 切换 |
F4 |
| 调试 | F5 |
| 生成函数定义 | Alt + Enter |
这些快捷键在日常开发中非常实用。
二十八、学会使用 Qt 官方文档
对于程序员来说,阅读官方文档是一项非常重要的能力。
例如,我们不知道 QPushButton 有哪些函数,可以:
- 将光标放到
QPushButton上; - 按下
F1; - 查看 Qt 帮助文档;
- 搜索类、方法以及相关示例。
在此特别强调了英文技术文档阅读能力的重要性,并建议在后续 Qt 学习过程中经常查阅文档。
因此,遇到不会的 API 时,不要第一时间依赖搜索引擎或直接复制代码。
更好的学习方式是:
先看官方文档 → 理解 API → 再写代码。
二十九、Qt 的学习路线建议
通过这一章的学习,可以将 Qt 入门知识整理成下面这条路线:
text
C++ 基础
↓
Qt 基本概念
↓
Qt Creator
↓
开发环境搭建
↓
创建 Qt 项目
↓
Qt Widgets
↓
UI 可视化设计
↓
信号与槽
↓
事件系统
↓
对象模型
↓
布局管理
↓
文件 / 网络 / 数据库
↓
综合项目
对于初学者来说,不建议一开始就追求复杂项目。
更好的方式是从一个简单的窗口开始:
text
窗口
↓
按钮
↓
标签
↓
输入框
↓
信号与槽
↓
多个窗口
↓
完整应用
一步一步建立对 Qt 的理解。
三十、总结
Qt 是一个以 C++ 为基础的跨平台 GUI 应用程序开发框架。
通过这一章的学习,我们可以建立起 Qt 开发的整体认识:
第一,认识 Qt。
Qt 是一个跨平台的 C++ GUI 框架,可以用于桌面、移动和嵌入式应用开发。
第二,认识 Qt Creator。
Qt Creator 是 Qt 开发的重要 IDE,提供代码编辑、项目管理、UI 设计、调试和构建等功能。
第三,学会创建 Qt 项目。
需要了解项目模板、构建系统、Qt Kit、窗口基类等概念。
第四,理解 Qt 项目结构。
重点掌握:
text
.pro
.h
.cpp
.ui
这些文件分别承担什么职责。
第五,理解 Qt 的运行机制。
尤其需要理解:
text
QApplication
↓
窗口对象
↓
show()
↓
exec()
↓
事件循环
第六,理解 Qt 对象模型。
Qt 使用 QObject 和对象树组织对象关系,并通过父子关系帮助管理对象生命周期。
写在最后
对于初学者来说,Qt 的知识点看起来很多,但实际上可以将其归纳成三个核心问题:
第一:界面怎么创建?
使用 Qt Widgets 或 UI Designer。
第二:用户操作之后程序怎么响应?
通过 Qt 的事件机制以及后续要学习的信号与槽机制。
第三:Qt 如何管理程序中的对象?
通过 QObject、父子关系以及对象树机制。
当这三个问题逐渐理解之后,Qt 就不再只是一个"会拖控件、会运行程序"的工具,而会逐渐成为一套完整的 C++ GUI 开发体系。
对于想进一步学习桌面软件、Linux GUI 或嵌入式图形界面开发的开发者来说,这也是进入 Qt 世界的重要第一步。
从一个窗口开始,逐渐理解 Qt;从能够运行程序,到真正理解程序。
结尾
uu们,本文的内容到这里就全部结束了,道尔在这里再次感谢您的阅读!
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ### 道尔柯南 C/C++ & Linux 底层探索者 | 一个正在努力学习的技术博主 *** ** * ** *** 👀 【关注】 跟随我一起深耕技术领域,见证每一次成长。 ❤️ 【点赞】 让优质内容被更多人看见,让知识传递更有力量。 ⭐ 【收藏】 把核心知识点存好,在需要时随时查、随时用。 💬 【评论】 分享你的经验或疑问,评论区一起交流避坑! 不要忘记给博主"一键四连"哦! "今日目标达成!" |
结语:希望对学习Linux相关内容的uu有所帮助,不要忘记给博主"一键四连"哦!