🌟 本仓库为一个面向开发者的 Qt 学习资源导航
💡 涵盖从基础知识到实战项目的资料与示例,帮助你快速入门、进阶
Qt 是一个跨平台的应用程序开发框架,被广泛应用于 桌面软件、嵌入式系统、移动应用 等领域。
本仓库整理了系统化的学习资料、工具与社区资源,帮助开发者更高效地学习和使用 Qt。
-
提供 基础知识 + 工具框架 + 实战项目 的学习参考
-
收录 学习资料、书籍、开源项目,避免信息碎片化
Qt 官网:https://www.qt.io/
Qt 官方文档:https://doc.qt.io/
Qt GitHub:https://github.com/qt
Qt 中文帮助文档:HTML
No. | 地址 |
---|---|
1 | 第001讲--剖析Qt开发入门必备第一讲 |
2 | 第002讲--剖析Qt跨平台GUI原理机制 |
3 | 第003讲--60分钟解决Qt工程管理 |
4 | 第004讲 实践Qt 5模板库项目中应用 |
5 | 第005讲 Qt开发常用算法及控件原理 |
No. | 地址 |
---|---|
0 | vs 2019安装QT |
1 | C++语言程序设计(第3版) |
2 | Effective STL中文版:50条有效使用STL的经验 |
3 | C++多线程编程实战 |
4 | C++网络编程 卷2 基于ACE和框架的系统化复用 |
5 | windows网络编程 |
6 | Linux Qt4窗口程序设计 |
7 | Qt Creator快速入门 |
8 | C++ Qt设计模式(第2版) |
No. | 地址 |
---|---|
1 | qt creator系列教程 |
2 | Qt编写串口通信程序 |
3 | Qt工程师进阶技术《23种设计模式》 |
4 | Qt对象模型 |
5 | Qt及Linux操作系统窗口设计 |
6 | Qt参考手册 |
7 | Qt on Android 核心编程试读样章 |
8 | QT+FFmpeg4.x Windows开发环境搭建 |
名称 | 地址 | 介绍 |
---|---|---|
Clementine Music Player | Clementine | 一个功能完善、跨平台的开源音乐播放器,非常适合用于学习如何开发媒体类应用,尤其是跨平台桌面应用,基于 Qt 框架开发,支持多种操作系统。 |
qTox | qTox | 一个功能强大、开源的即时通讯(IM)客户端,基于 Tox 协议构建。它支持端到端加密、语音和视频通话、文件传输、群组聊天等功能 |
TileMap地图编辑器 | mapeditor | 是一款非常流行的开源 2D 地图编辑器,广泛应用于游戏开发领域。 |
WizQTClient | WizQTClient | 专注于提供一个优秀的个人知识管理(PKM)解决方案 |
DB Browser for SQLite | DB4S | 一个开源、跨平台的 SQLite 数据库可视化管理工具 |
GoldenDict | goldendict | 一款功能强大、开源的跨平台词典查询工具,支持多种本地和在线词典格式,具备优秀的排版渲染能力 |
QtAV | QtAV | 一个基于 Qt 和 FFmpeg 的高性能跨平台多媒体播放库,旨在帮助开发者更轻松地构建功能强大的音视频播放器 |
JQTools | JQ | 一个基于 Qt 框架开发的开源小工具集合,专为 Qt 开发者设计 |
shotcut | shotcut | 一款功能强大的开源视频编辑器,适用于 Windows、macOS 和 Linux 平台。 |
Live Helper Chat | Live Helper Chat | 这是一个基于 Web 的开源实时客服聊天系统。 |
QupZilla | qupzilla | 一个基于 Qt WebEngine(或 QtWebKit)开发的轻量级、跨平台开源网页浏览器。 |
Otter Browser | otter-browser | 一款基于 Qt WebEngine 的开源网页浏览器,旨在提供一个轻量级、可高度定制、功能齐全的现代浏览器替代方案 |
CuteMarkEd | CuteMarkEd | 一个使用 Qt 框架开发的开源 Markdown 编辑器,界面简洁、功能实用,支持实时预览和多种导出格式,是学习如何构建现代 Markdown 编辑器的理想项目 |
Rythem | Rythem | 一个由腾讯 AlloyTeam 开发的开源网络抓包与调试工具,可以看作是 Fiddler / Charles 的 Qt 版本实现 |
NitroShare | nitroshare-desktop | 一个开源的、基于局域网(LAN)的 跨平台文件传输工具,它允许你在本地网络中的设备之间快速、安全地共享和传输文件,无需依赖云服务或外部服务器 |
ScreenCloud | screencloud | 一个开源的跨平台截屏工具,支持 Windows、macOS 和 Linux 系统 |
Notes | notes | 一个使用 Qt 框架开发的开源记事本(Notepad)类桌面应用程序,界面简洁、功能实用,支持基本的文本编辑与文件管理功能 |
Qwt | qwt | 一个历史悠久的 Qt 扩展库,专注于提供基于 Qt Widgets 的图形绘制控件 |
QCustomPlot | QCustomPlot | 是专为 Qt 设计的轻量级、高性能绘图控件,单头文件实现,易于集成。 |
SerialTool | SerialTool | 一个跨平台的串口/网络调试工具。此工具支持串口调试助手、终端、波形显示和文件传输等功能。 |
QOwnNotes | QOwnNotes | 基于 Qt 的笔记应用 |
CutiePi | cutiepi-board | Qt 嵌入式案例 |
No. | title | 地址 |
---|---|---|
1 | 0-Qt开发工程师课程学习指导及发展前景 | 点击学习 |
2 | 1-Windows平台Q开发t环境安装及配置 | 点击学习 |
3 | 2-Linux平台Q开发t环境安装及配置 | 点击学习 |
4 | 2-Visual Studio环境安装 | 点击学习 |
5 | 3-QVBoxLayout(垂直排列布局) | 点击学习 |
6 | 4-QHBoxLayout(水平排列布局) | 点击学习 |
7 | 5-Qt开发布局--QGridLayout(网格排列布局) | 点击学习 |
8 | 6-搞懂Qt开发《Qt工程项目管理技术》 | 点击学习 |
9 | 7-Qt5_6信号与槽机制项目实战 | 点击学习 |
10 | 7-Qt开发基础控件(13种专用控件)--001 | 点击学习 |
11 | 7-Qt开发基础控件(15种专用控件)--002 | 点击学习 |
12 | 7-Qt开发基础控件(15种专用控件)--003 | 点击学习 |
13 | 8-Qt开发高级控件(Tree View控件)--001 | 点击学习 |
14 | 8-Qt开发高级控件(Tree Widget控件)--002 | 点击学习 |
15 | 9-Qt开发高级控件(List View控件和Plain Text Edit控件)--001 | 点击学习 |
16 | 9-Qt开发高级控件(List View控件和Plain Text Edit控件)--002 | 点击学习 |
17 | 9-Qt开发高级控件(List View控件)--003 | 点击学习 |
18 | 9-Qt开发高级控件(List View控件)--004 | 点击学习 |
19 | 10-Qt开发高级控件(Table Widget控件) | 点击学习 |
20 | 11-Qt开发高级控件(Table View控件) | 点击学习 |
21 | 12-Qt开发高级控件(Tab Widget控件) | 点击学习 |
22 | 13-Qt开发必用《QMessageBox消息框》详解 | 点击学习 |
23 | 14-Qt开发项目《布局管理3个类》详解1 | 点击学习 |
24 | 14-Qt开发项目《布局管理3个类》详解2 | 点击学习 |
25 | 15-Qt进程技术《QML动画特效》详解1 | 点击学习 |
26 | 15-Qt进程技术《QML动画特效》详解2 | 点击学习 |
27 | 15-Qt进程技术《数据可视化》详解 | 点击学习 |
28 | 15-Qt进程技术《正则QRegExp技术》详解1 | 点击学习 |
29 | 15-Qt进程技术《正则QRegExp技术》详解2 | 点击学习 |
30 | 15-Qt进阶技术《多线程实战应用》详解 | 点击学习 |
31 | 16-Qt进阶技术《OpenCV视频采集技术》详解 | 点击学习 |
32 | 17-Qt进阶技术《TCP_UDP协议编程》详解 | 点击学习 |
33 | 21-Qt开发【WPS Office 2016个人版软件】项目实战 | 点击学习 |
34 | 22-Qt开发【腾讯QQ2022客户端软件】项目实战 | 点击学习 |
35 | 23-Qt开发【Android手机锁屏软件】项目实战 | 点击学习 |
36 | 24-Qt开发【Android电池充电》项目实战 | 点击学习 |
37 | 25-Qt开发【汽车3D中控仪表盘】项目实战 | 点击学习 |
38 | 26-Qt开发【MP4视频播放器】项目实战 | 点击学习 |
39 | 27-Qt开发【获取电脑MAC及IP地址】项目实战 | 点击学习 |
40 | 28-Qt开发【MP3音乐播放器搜索引擎】项目实战 | 点击学习 |
41 | 29-Qt开发【用户管理权限】项目实战1 | 点击学习 |
42 | 29-Qt开发【用户管理权限】项目实战2 | 点击学习 |
43 | 30-Qt开发【基于TCP协议-客户端与服务器架构聊天系统】项目实战1 | 点击学习 |
44 | 30-Qt开发【基于TCP协议-客户端与服务器架构聊天系统】项目实战2 | 点击学习 |
45 | 31-Qt开发【获取文件系统属性】项目实战 | 点击学习 |
46 | 32-Qt开发【SQL结合Qt实现增删改查】项目实战 | 点击学习 |
47 | 33-Qt开发【图形视图架构相册浏览器】项目实战 | 点击学习 |
48 | 34-Qt开发【极速文件传输工具】项目实战 | 点击学习 |
49 | 35-Qt开发【QML实现交通信号灯】项目实战 | 点击学习 |
50 | 36-Qt开发【酒店管理系统】项目实战 | 点击学习 |
51 | 37-Qt开发【俄罗斯方块游戏】项目实战 | 点击学习 |
52 | 38-Qt开发【学生管理系统】项目实战 | 点击学习 |
53 | 39-Qt开发【腾讯QQ客户端--图像剪切功能】项目实战 | 点击学习 |
54 | 40-Qt开发【磁盘管理系统】 | 点击学习 |
55 | 41-Qt开发【天气预报系统】项目实战 | 点击学习 |
56 | 42-Qt开发【系统项目菜单栏_工具栏】项目实战 | 点击学习 |
57 | 43-Qt开发CRM【汽车销售管理系统】项目实战 | 点击学习 |
58 | 44-Qt开发【时间服务器架构系统】项目实战 | 点击学习 |
59 | 45-Qt开发【动态时钟系统】项目实战 | 点击学习 |
60 | 46-Qt开发【射击游戏--飞机大战】项目实战 | 点击学习 |
61 | 47-Qt开发【图片浏览器系统】项目实战 | 点击学习 |
62 | 48-Qt开发【基于Linux平台客户端与服务器】项目实战 | 点击学习 |
63 | 49-Qt开发【商品库存管理系统】项目实战 | 点击学习 |
64 | 50-Qt开发【经典推箱子游戏】项目实战 | 点击学习 |
65 | 51-Qt开发【TCP_UDP协议网络调试助手 2.0】项目实战 | 点击学习 |
Qt 是一个开源的跨平台应用开发框架,由 C++ 编写而成。它不仅仅是一个 GUI(图形用户界面)库,更是一个完整的应用开发平台。它提供了丰富的 API 和工具,覆盖了从 UI 设计到网络通信、数据库、多媒体等几乎所有应用开发所需的功能。
Qt 最大的特点是 “一次编写,处处运行”(Write Once, Run Anywhere)。这意味着你用 Qt 编写的代码,可以轻松地编译和部署到多种操作系统上,包括 Windows、Linux、macOS、Android、iOS,甚至是各种嵌入式系统。这大大减少了跨平台开发的成本和工作量。
你可以从 Qt 官方网站下载 Qt 安装程序。安装时,你需要选择不同版本的 Qt 库和编译器工具链,以及其他所需的模块。对于初学者,建议选择最新的稳定版本,并勾选一个或多个主流平台的开发套件(比如桌面版 MinGW 或 MSVC)。
Qt Creator 是 Qt 官方提供的集成开发环境(IDE)。它专为 Qt 开发量身定制,集成了代码编辑器、UI 设计器、调试器、项目管理等功能。它能让你轻松创建、构建、运行和调试 Qt 项目。当你安装 Qt 时,Qt Creator 通常会作为默认选项一并安装。
Qt 项目主要有两种构建系统:QMake 和 CMake。它们都用于管理项目的编译和链接。
- QMake: 这是 Qt 历史悠久的构建系统,使用
.pro
文件来描述项目。它语法简单,对 Qt 特性支持良好。一个典型的.pro
文件会包含源代码文件列表、头文件、模块依赖以及其他编译配置。- 例如:
SOURCES = main.cpp widget.cpp
表示项目包含这两个源文件。
- 例如:
- CMake: CMake 是一个更通用的、跨平台的构建系统,使用
CMakeLists.txt
文件。CMake 功能强大,灵活性高,被越来越多的现代 C++ 项目所采用,Qt 也对它提供了很好的支持。对于大型或需要与其他 C++ 库集成的项目,CMake 往往是更好的选择。
QObject
是 Qt 对象模型的核心类,几乎所有 Qt 类都直接或间接继承自它。QObject
提供了两个非常重要的功能:
- 父子关系(Parent-Child Relationship): 当一个
QObject
实例被创建时,你可以指定它的父对象。如果父对象被销毁,它会自动销毁所有子对象。这种机制有效地解决了内存泄漏问题,你无需手动管理每一个对象的生命周期,只需关注顶层对象的销毁即可。 - 信号与槽机制: 这是
QObject
提供的另一个核心特性,下面会详细介绍。
信号与槽是 Qt 中实现对象间通信的一种高级机制,它是一种类型安全的、松耦合的事件处理方式。
- 信号 (Signals): 信号是一种特殊的函数,当某个事件发生时(例如用户点击了按钮),它会被“发射”出来。信号只有声明,没有实现,由 moc(元对象编译器)自动生成。
- 槽 (Slots): 槽是普通的 C++ 函数,用于响应信号。当一个信号被连接到一个槽上时,只要信号被发射,对应的槽函数就会被自动调用。
你可以使用 QObject::connect()
函数将一个对象的信号连接到另一个对象的槽。这种机制的好处是,信号的发送者和槽的接收者彼此无需知道对方的细节,从而实现了高度的解耦。
元对象系统是 Qt 框架的基石,它扩展了标准 C++,提供了反射、内省(introspection)和运行时类型信息等高级功能。QObject
的许多核心特性,如信号与槽、动态属性等,都依赖于元对象系统。
Q_OBJECT
: 凡是需要使用信号与槽、动态属性等元对象特性的类,都必须在类声明中加上这个宏。Q_PROPERTY
: 这个宏允许你在类中定义“动态属性”,这些属性可以像普通的成员变量一样读写,但同时具有元对象系统的特性,可以被信号槽和 QML 等访问。
事件 (QEvent) 是用户操作、系统消息等在 Qt 应用中产生的各种“事件”。例如,鼠标点击、键盘输入、窗口大小改变等,都会被封装成一个 QEvent
对象。
事件循环 (Event Loop) 是 Qt 应用的“心脏”。它由 QCoreApplication::exec()
或 QApplication::exec()
函数启动。事件循环会不断地从事件队列中获取事件,并将其分发给相应的对象进行处理。这是一种典型的非阻塞编程模式,使得你的应用可以同时响应多种事件,而不会被某个耗时操作所阻塞。
Qt 提供了两种主流的 UI 开发技术:Qt Widgets 和 Qt Quick/QML。它们各有优势,适用于不同的开发场景。了解它们的不同,可以帮助你选择最适合你项目的技术栈。
Qt Widgets 是传统的桌面应用开发技术,它基于 C++,提供了丰富的原生风格控件。它非常适合开发经典的、功能强大的桌面应用,如 IDE、办公软件和专业工具。
-
基础控件 (QPushButton, QLabel, QLineEdit, QListView 等):Qt Widgets 提供了大量的现成控件,覆盖了绝大多数桌面应用需求。这些控件继承自
QWidget
,你可以通过代码创建它们,并设置它们的属性(如文本、图标、大小等)。 -
布局管理 (QHBoxLayout, QVBoxLayout, QGridLayout 等):在 Qt Widgets 中,你通常不直接设置控件的绝对位置,而是使用布局管理器。布局管理器会自动调整控件的大小和位置,以适应窗口的变化。
QHBoxLayout
用于水平排列,QVBoxLayout
用于垂直排列,而QGridLayout
则提供了网格布局,让你能以表格形式组织控件。 -
对话框与窗口管理 (QDialog, QFileDialog, QMessageBox):Qt 提供了多种预设的对话框类,方便你与用户进行交互。
QDialog
是所有对话框的基类。QFileDialog
用于打开或保存文件,QMessageBox
用于显示提示、警告或错误信息。使用这些类可以快速构建标准的交互界面。 -
自定义控件与绘图 (QPainter, QStyle, QGraphicsView):当标准控件无法满足需求时,你可以创建自己的自定义控件。
QPainter
是 Qt 强大的 2D 绘图引擎,你可以用它在控件上绘制任何图形,从简单的线条和形状到复杂的图表和动画。QGraphicsView
框架则提供了一个强大的场景-视图架构,非常适合处理大量的 2D 图形项,例如游戏、图表编辑器等。QStyle
允许你更改控件的渲染风格,实现独特的外观。
Qt Quick 是一种现代的、基于声明式编程的 UI 开发技术。它使用 QML 这种类似 JavaScript 的语言来描述 UI。Qt Quick 特别适合开发现代、流畅、动画效果丰富的应用,尤其是在移动端和嵌入式设备上。
-
QML 语法基础 (属性、信号、绑定、动画):QML (Qt Modeling Language) 是一种声明式语言。你通过属性(如
width
、height
、color
)来定义界面元素,通过信号(如onClicked
)来处理用户交互。最强大的特性之一是属性绑定,你可以将一个元素的属性值绑定到另一个元素的属性值上,当源属性变化时,目标属性会自动更新。此外,QML 内置了丰富的动画支持,可以轻松实现平滑的过渡和动态效果。 -
Qt Quick Controls (Button, TextField, ListView 等):Qt Quick 提供了大量的跨平台控件,它们用 QML 编写,可以在不同设备上自动调整为原生风格。与 Qt Widgets 相比,Qt Quick Controls 更轻量,更易于定制和修改。
-
QML 与 C++ 交互 (QQmlContext, QObject 暴露给 QML):QML 主要负责 UI 的描述,而 C++ 则负责处理复杂的业务逻辑、数据处理和底层计算。你可以通过 元对象系统,将 C++ 中的
QObject
子类暴露给 QML。QQmlContext
是连接 QML 和 C++ 的关键,它允许你在 QML 中直接调用 C++ 对象的方法、访问属性,并连接信号与槽,实现了前端(QML)和后端(C++)的完美分离。 -
QML 性能优化与最佳实践:为了确保应用的流畅性,QML 开发也需要注意性能。例如,避免在 QML 中进行复杂的计算,将耗时操作放到 C++ 后台线程中。合理使用
Loader
和Repeater
等组件来按需加载和复用元素,从而减少内存和 CPU 开销。
掌握了 Qt 的基础和核心模块后,就可以探索更复杂、更强大的功能了。这些高级主题能让你构建出性能更优、结构更合理、适应性更强的应用。
在任何复杂的应用中,多线程都是一个不可或缺的主题。正确使用多线程可以避免 UI 阻塞,提升应用的响应速度。
QThread
/QRunnable
:QThread
是 Qt 提供的线程管理类,你可以通过继承它并重写run()
方法来执行后台任务。QRunnable
则是一个更轻量级的接口,通常配合QThreadPool
使用,用于执行一次性的、短期的任务。- 信号槽跨线程通信: 这是 Qt 多线程的精髓。你可以安全地在不同线程之间使用信号与槽进行通信。例如,在工作线程中发射一个信号,主线程中的槽函数会自动接收并执行,而无需担心线程同步问题。Qt 的元对象系统会自动处理线程间的同步,确保槽函数在正确的线程上下文中被调用。
- 线程池与异步任务:
QThreadPool
提供了一个可重用的线程集合,用于执行QRunnable
任务。它避免了频繁创建和销毁线程带来的开销。QtConcurrent
则提供了一系列更高层次的异步函数,如QtConcurrent::run()
,能让你更简单地将函数放入后台线程执行,而无需直接管理线程对象。
- Qt 插件系统 (
QPluginLoader
): Qt 提供了一个强大的插件系统。你可以将应用的部分功能打包成独立的库文件(.dll 或 .so),然后在运行时动态加载。这让你的应用拥有可扩展性,用户可以根据需要安装或卸载功能模块。 - 动态库与模块化设计: 插件系统的基础是动态链接库(DLL/SO)。通过将应用的不同功能划分为独立的库,可以实现更好的模块化,降低模块间的耦合,方便团队协作开发和代码重用。
- Windows / Linux / macOS 部署: 掌握如何为不同的桌面操作系统打包和部署 Qt 应用是至关重要的。这包括处理依赖项、创建安装程序(例如使用 Inno Setup 或 NSIS),以及针对不同平台进行编译配置。
- Android / iOS 移动端开发: Qt 提供了对 Android 和 iOS 的全面支持,允许你使用 QML/C++ 编写原生风格的移动应用。你可以调用平台 API,使用传感器、摄像头等设备功能。
- 嵌入式 Qt: Qt 是嵌入式设备上构建 UI 的热门选择,尤其是在汽车、医疗和工业控制等领域。你可以在树莓派(Raspberry Pi)等设备上运行 Qt,或者使用 Yocto 等工具构建定制化的嵌入式 Linux 系统。
- 翻译 (.ts 文件, Qt Linguist): Qt 提供了一套完整的工具链来支持多语言应用。你可以在代码中使用
tr()
函数标记需要翻译的字符串,然后使用lupdate
工具生成.ts
翻译文件。翻译人员可以使用Qt Linguist
工具进行翻译,最后再用lrelease
生成二进制.qm
文件,供应用在运行时加载。 - 字符编码与多语言支持: Qt 的
QString
类在内部使用 Unicode,这使得它能轻松处理各种语言和字符集,避免了常见的编码问题。
- Qt Profiler: Qt Creator 内置了一个强大的性能分析工具,可以帮助你检测应用的 CPU 使用率、内存占用和绘制性能,从而定位性能瓶颈。
- 内存与资源管理: Qt 的父子对象模型已经为你处理了大部分内存管理,但你仍需要注意避免循环引用等问题。此外,合理使用
QSharedPointer
等智能指针,以及正确管理线程中的资源也是关键。 - QML 性能优化: 对于 QML 应用,需要特别注意性能。例如,避免在 QML 中进行复杂的 JS 计算,将数据处理放在 C++ 后台,并使用
Loader
和Repeater
等组件来按需加载和复用 UI 元素。
除了强大的框架本身,Qt 还有一个完善的工具链和活跃的生态系统。这些工具能极大地提高开发效率,而丰富的第三方库则能帮助你快速扩展应用功能。
Qt Creator 是专为 Qt 开发量身定制的集成开发环境。它不仅仅是一个简单的代码编辑器,更是一个集成了多种功能的强大工具。
- 调试器: Qt Creator 内置了强大的调试器,支持 GDB、CDB 等多种调试后端,可以方便地设置断点、查看变量、跟踪调用堆栈,帮助你快速定位和解决代码中的问题。
- UI 设计器 (Qt Designer): 对于 Qt Widgets 应用,你可以使用 Qt Designer 以拖拽的方式设计界面。它所见即所得,可以大大加快 UI 原型的构建速度,并自动生成可被代码调用的 UI 文件。
- QML 设计器: 对于 Qt Quick 应用,Qt Creator 也提供了 QML 设计器。它让你可以在可视化的环境中编辑 QML 文件,预览 UI 效果,并进行简单的布局调整。
Qt 提供了多种构建工具,以适应不同的开发习惯和项目需求。
- QMake: 这是 Qt 历史悠久的构建系统,使用
.pro
文件。它的语法简单,与 Qt 的集成度非常高,非常适合初学者和中小型项目。 - CMake: 作为现代 C++ 项目的主流构建系统,CMake 功能更强大,灵活性更高,也更容易与其他 C++ 库集成。现在,Qt 也大力推荐使用 CMake 来管理大型或复杂的项目。
Qt 的生态系统中有很多优秀的第三方库,可以为你提供额外的功能。
-
Qwt (科学绘图): 如果你的项目涉及科学或工程领域,需要绘制复杂的曲线图、散点图等,那么 Qwt 是一个非常好的选择。它提供了强大的二维绘图组件,并与 Qt 完美集成。
-
KDChart (图表): 这是另一个专业的图表库,提供了丰富的图表类型和高度可定制化的功能,适合需要高性能、高质量图表显示的应用。
-
QScintilla (代码编辑控件): 如果你正在开发一个像记事本、IDE 或代码编辑器那样的应用,QScintilla 可以为你提供一个功能完善、高性能的代码编辑控件,支持语法高亮、自动补全等功能。
-
Qt for Python (PySide6): 如果你更喜欢使用 Python 语言,那么 PySide6 提供了 Qt 的完整 Python 绑定。这使得你可以用 Python 的简洁语法来构建强大的 Qt 界面,同时仍能利用 Qt 背后强大的 C++ 性能。
从两大热门方向展开讲解,Qt 桌面开发和 Qt 嵌入式开发。每条路线均包含从基础语法到高级特性的完整技术栈,并结合现代 C++ 新特性与工程实践技巧,帮助你构建扎实的 Qt 开发能力。
-
Windows、Linux、macOS 都支持 Qt 开发,根据项目需求和个人偏好选择合适的操作系统
-
对于 Linux 用户,推荐使用 Ubuntu 或者 Fedora 等流行发行版,因其社区活跃度高,遇到问题更容易找到解决方案。
-
访问 Qt 官网下载适合你操作系统的在线安装包或使用网盘里的离线安装包
-
使用 Qt Maintenance Tool 进行组件管理(如添加/移除 Qt 版本、工具等)。
-
推荐至少安装一个 LTS 版本的 Qt(长期支持版本),以及最新稳定版,以便能够覆盖更多的应用场景和技术特性。
-
安装插件增强功能,例如 Git 插件、ClangCodeModel 提供更智能的代码补全。
-
Qt Creator:官方推荐的 IDE,集成了代码编辑器、调试器、UI 设计器等功能,非常适合 Qt 开发。
-
Visual Studio + Qt Visual Studio Tools: 如果你习惯使用 Visual Studio,可以通过安装 Qt Visual Studio Tools 插件来实现 Qt 开发。
-
CLion + CMake: JetBrains 的 CLion 支持通过 CMake 来构建 Qt 项目,适合那些喜欢 Jetbrains 生态系统的开发者。
-
根据所选平台安装相应的编译器(GCC、MSVC、Clang 等)。
-
设置环境变量 PATH,确保命令行可以直接调用 qmake、cmake 等构建工具。
-
学习如何编写 .pro 文件(qmake 构建系统)或者 CMakeLists.txt 文件(CMake 构建系统),并理解两者之间的差异与优缺点。
-
学习 Git 基础知识,掌握常用命令如 git clone, git pull, git push, git commit, git branch 等。
-
配置 GitHub/GitLab 账号,了解如何创建仓库、提交代码、处理分支合并冲突等。
-
使用 Git GUI 工具(如 SourceTree、GitKraken)提高工作效率。
技术点 | 所属模块 | 作用与说明 | 典型应用场景 |
---|---|---|---|
auto | C++11 | 自动类型推导,简化复杂类型声明 | 遍历 STL 容器时自动识别迭代器类型 |
nullptr | C++11 | 替代 NULL,提高空指针安全性 | 函数参数为指针时避免歧义 |
范围 for 循环 | C++11 | 简化容器遍历语法 | 遍历 QList、QMap 等 Qt 容器 |
Lambda 表达式 | C++11 | 匿名函数,用于信号连接或异步任务 | connect() 中直接编写槽函数逻辑 |
智能指针 | C++11/14 | 自动内存管理,防止内存泄漏 | 封装资源如文件句柄、网络连接 |
移动语义 | C++11 | 提升临时对象性能 | 返回大对象时避免拷贝 |
constexpr | C++11 | 编译期常量计算 | 构建编译期查找表或配置 |
std::tuple | C++11 | 多值返回结构体替代 | 存储多个不同类型的结果 |
协程 (C++20) | C++20 | 异步编程模型 | 实现异步 HTTP 请求、数据流处理 |
技术点 | 所属模块 | 作用与说明 | 典型应用场景 |
---|---|---|---|
QObject 与元对象系统 | QObject | Qt 对象模型核心,支持信号与槽机制 | 控件通信、事件驱动编程 |
Q_OBJECT 宏、moc | QObject | 启用元对象功能,自动生成 moc 文件 | 自定义类按需继承 QObject 并加此宏 |
信号与槽机制 | QObject | Qt 的核心通信机制 | 控件间数据更新、状态同步 |
parent/child 机制 | QObject | 自动内存管理,父对象销毁子对象 | UI 组件嵌套管理 |
deleteLater() | QObject | 延迟删除对象,避免跨线程释放问题 | 在非主线程中安全删除控件 |
QFile、QTextStream | IO | 文件读写操作 | 日志记录、配置保存 |
QDataStream | IO | 二进制序列化工具 | 数据持久化、网络传输 |
QDir/QFileInfo | IO | 文件路径、属性访问 | 判断文件是否存在、获取修改时间 |
QDateTime、QDate、QTime | Core | 时间日期处理 | 记录日志时间戳、定时任务 |
JSON 解析:QJsonDocument 等 | Core | 支持 JSON 数据解析与生成 | 接口交互、配置文件读取 |
QList/QMap/QVector | Core | Qt 自带容器类,优化了 GUI 使用场景 | 存储界面元素、状态映射 |
QDebug/qWarning/qInfo | Debug | 输出调试信息 | 开发阶段调试逻辑输出 |
QLoggingCategory | Debug | 分类控制日志输出级别 | 生产环境关闭部分日志减少开销 |
QThread、QtConcurrent | Thread | 多线程任务执行 | 图片加载、后台计算不阻塞 UI |
技术点 | 所属模块 | 作用与说明 | 典型应用场景 |
---|---|---|---|
QWindow | Gui | 底层窗口抽象类,用于无 QWidget 的场景 | EGLFS、Wayland 下创建窗口 |
QScreen | Gui | 获取屏幕信息(分辨率、DPI、可用区域) | 多屏显示适配、布局调整 |
QPlatformIntegration | Gui | 平台适配接口,用于定制平台行为 | 自定义嵌入式平台渲染方式 |
QImage、QPixmap | Gui | 图像数据显示与绘制 | 图像处理、图标显示 |
QPainter | Gui | 2D 绘图引擎,支持抗锯齿、渐变等 | 自定义控件绘图、图表绘制 |
QPen、QBrush | Gui | 设置画笔样式、填充颜色 | 绘图细节控制 |
QEvent、QMouseEvent | Gui | 事件处理机制 | 实现鼠标拖拽、键盘快捷键 |
QFont、QFontMetrics | Gui | 字体设置与文本尺寸计算 | 文本排版、UI 自适应 |
QTransform | Gui | 图形变换矩阵(缩放、旋转) | 动画效果实现 |
技术点 | 所属模块 | 作用与说明 | 典型应用场景 |
---|---|---|---|
QWidget | Widgets | 所有控件基类 | 创建自定义控件 |
QLabel、QPushButton、QRadioButton | Widgets | 基础 UI 控件 | 表单设计、按钮点击 |
QComboBox、QListWidget | Widgets | 列表选择控件 | 下拉菜单、列表展示 |
QGroupBox、QFrame | Widgets | 容器控件,组织 UI 结构 | 界面分组与美化 |
QHBoxLayout、QVBoxLayout | Layout | 布局管理器,自动排列控件 | 自适应窗口大小变化 |
QGridLayout | Layout | 网格布局,适合表单布局 | 登录界面、配置面板 |
QSpacerItem | Layout | 布局占位符,控制控件间距 | 美化 UI 布局 |
自定义控件 | Widgets | 继承 QWidget 或已有控件扩展功能 | 实现仪表盘、进度条等 |
QPropertyAnimation | Animation | 属性动画,实现平滑过渡 | 按钮弹跳、页面切换动画 |
技术点 | 所属模块 | 作用与说明 | 典型应用场景 |
---|---|---|---|
QThread | Thread | 创建独立线程运行任务 | 长时间后台任务(如下载) |
moveToThread | Thread | 将对象移动到指定线程 | 网络请求、数据库访问 |
QRunnable + QThreadPool | Thread | 可复用线程池执行一次性任务 | 多个图片加载任务并发处理 |
QtConcurrent::run | Concurrent | 高级封装,简化异步调用 | 快速启动后台任务 |
QFuture & QFutureWatcher | Concurrent | 监听异步任务状态 | 显示任务进度条 |
QMutex、QWaitCondition | Thread | 线程同步机制 | 多线程共享资源保护 |
QAtomicInt、QAtomicPointer | Thread | 原子操作,线程安全 | 计数器、标志位设置 |
技术点 | 所属模块 | 作用与说明 | 典型应用场景 |
---|---|---|---|
QFile | IO | 文件打开、读写、复制 | 本地配置文件、日志写入 |
QTextStream | IO | 文本格式读写,支持编码转换 | UTF-8、GBK 文件读写 |
QDataStream | IO | 二进制格式序列化/反序列化 | 保存用户数据、网络传输 |
QSettings | IO | 本地配置保存 | 用户偏好设置、窗口位置记忆 |
QTemporaryFile | IO | 创建临时文件,程序退出自动清理 | 缓存文件、中间结果存储 |
ZIP 支持(第三方) | IO | 文件压缩解压 | 导出项目包、备份数据 |
技术点 | 所属模块 | 作用与说明 | 典型应用场景 |
---|---|---|---|
QNetworkAccessManager | Network | 发起 HTTP 请求 | 接口调用、REST API |
QTcpSocket / QTcpServer | Network | TCP 客户端/服务端通信 | 内部系统通信、远程控制 |
QUdpSocket | Network | UDP 通信 | 广播消息、实时数据传输 |
QWebSocket | Network | WebSocket 通信 | 实时聊天、推送通知 |
QSslSocket | Network | SSL/TLS 加密通信 | 安全登录、HTTPS 代理 |
QHostInfo | Network | DNS 查询 | 获取 IP 地址 |
QNetworkProxy | Network | 设置代理服务器 | 穿透防火墙、测试环境模拟 |
技术点 | 所属模块 | 作用与说明 | 典型应用场景 |
---|---|---|---|
QSqlDatabase | Sql | 连接数据库(SQLite、MySQL、PostgreSQL) | 本地缓存、用户数据存储 |
QSqlQuery | Sql | 执行 SQL 语句,支持参数绑定 | 数据增删改查 |
QSqlTableModel | Sql | 数据库模型绑定视图 | 表格控件自动刷新 |
QSqlRelationalTableModel | Sql | 支持外键关系映射 | 主从表数据绑定 |
ORM(可选) | Sql | 使用第三方库如 QtOrm 实现对象关系映射 | 简化数据库操作 |
数据库连接池 | Sql | 管理多个数据库连接 | 高并发场景下的数据库访问优化 |
技术点 | 所属模块 | 作用与说明 | 典型应用场景 |
---|---|---|---|
QSoundEffect | Multimedia | 播放短音频文件 | 按钮点击音效、提示音 |
QAudioOutput | Multimedia | 音频播放组件 | 播放 MP3、WAV 文件 |
QMediaPlayer | Multimedia | 视频播放器 | 播放 MP4、AVI 视频 |
QCamera | Multimedia | 调用摄像头设备 | 视频采集、人脸识别 |
QMediaRecorder | Multimedia | 录制视频或音频 | 视频录制功能实现 |
FFT 分析 | Multimedia | 音频分析与可视化 | 音乐可视化、频谱显示 |
技术点 | 所属模块 | 作用与说明 | 典型应用场景 |
---|---|---|---|
QWebEngineView | WebEngine | 内嵌浏览器控件 | 展示网页内容、在线帮助文档 |
evaluateJavaScript | WebEngine | 执行 JS 脚本 | 页面动态控制、数据提取 |
QWebEngineUrlRequestInterceptor | WebEngine | 拦截网页请求 | 过滤广告、替换资源 |
QWebEngineCookieStore | WebEngine | 管理 Cookie | 登录状态保持 |
WebRTC 支持 | WebEngine | 音视频通信功能 | 实现实时视频会议功能 |
技术点 | 所属模块 | 作用与说明 | 典型应用场景 |
---|---|---|---|
插件接口设计 | Plugin | 使用纯虚类定义插件接口 | 插件框架设计 |
Q_PLUGIN_METADATA | Plugin | 注册插件元数据 | 动态加载插件 |
QPluginLoader | Plugin | 加载 DLL/Dylib 插件 | 实现热插拔机制 |
插件部署 | Plugin | 构建插件目录结构 | 支持插件化架构 |
插件管理 | Plugin | 实现插件注册中心 | 插件启用/禁用管理 |
技术点 | 所属模块 | 作用与说明 | 典型应用场景 |
---|---|---|---|
tr() 函数 | i18n | 实现 UI 翻译 | 多语言支持 |
lupdate 工具 | i18n | 提取翻译字符串生成 .ts 文件 | 自动生成翻译模板 |
Linguist 工具 | i18n | 编辑 .ts 文件并生成 .qm | 翻译人员使用 |
QTranslator | i18n | 动态加载 .qm 文件 | 切换语言 |
语言包管理 | i18n | 支持多语言切换、默认语言回退机制 | 国际市场产品发布 |
技术点 | 所属模块 | 作用与说明 | 典型应用场景 |
---|---|---|---|
.pro 文件 | Build | 使用 qmake 构建项目 | Windows/Linux/macOS 通用构建 |
CMakeLists.txt | Build | 使用 CMake 构建项目 | 更灵活跨平台项目构建 |
Makefile 自动生成 | Build | qmake 生成 Makefile | Linux 下手动编译 |
debug/release 构建 | Build | 构建不同版本 | 开发调试 vs 正式发布 |
跨平台构建 | Build | Windows/Linux/macOS 构建差异处理 | 多平台统一代码库 |
windeployqt/macdeployqt | Deploy | 自动打包依赖库 | 发布桌面应用程序 |
技术点 | 所属模块 | 作用与说明 | 典型应用场景 |
---|---|---|---|
Valgrind | Debug | 内存泄漏检测(Linux) | 内存错误排查 |
Visual Leak Detector | Debug | 内存泄漏检测(Windows) | Win32 应用调试 |
Perf / VTune | Debug | CPU/GPU 性能分析 | 查找性能瓶颈 |
qDebug()、QLoggingCategory | Debug | 输出调试信息 | 开发阶段调试逻辑输出 |
Qt Test 模块 | Debug | 单元测试框架 | 自动化测试 |
GDB / LLDB | Debug | 调试器 | 断点调试、变量查看 |
技术点 | 所属模块 | 作用与说明 | 典型应用场景 |
---|---|---|---|
交叉编译环境搭建 | 系统配置 | 编译目标平台可执行程序 | 在 x86 PC 上编译 ARM 架构程序 |
Buildroot / Yocto | 系统配置 | 构建嵌入式 Linux 根文件系统 | 定制化嵌入式系统镜像 |
U-Boot 启动流程 | Bootloader | 初始化硬件、加载内核 | 系统启动控制 |
内核编译与裁剪 | OS | 配置设备驱动、启用功能模块 | 支持特定外设(如触摸屏) |
文件系统管理 | OS | 搭建根文件系统(BusyBox) | 构建最小系统运行 Qt 应用 |
sysfs/procfs/devtmpfs | OS | 访问设备节点、系统信息 | 控制 GPIO、读取 CPU 温度 |
systemd/init.d | OS | 系统服务管理 | 设置开机启动 Qt 程序 |
技术点 | 所属模块 | 作用与说明 | 典型应用场景 |
---|---|---|---|
GPIO 控制 | 外设驱动 | 控制引脚高低电平 | 控制 LED、按钮输入 |
I2C/SPI/UART | 外设驱动 | 串行通信协议 | 与传感器、显示屏通信 |
tslib 触摸校准库 | 外设驱动 | 提供触摸屏支持 | 工业 HMI 设备 |
DRM/KMS 显示管理 | 图形驱动 | 控制显示输出模式 | 多屏显示、分辨率设置 |
Framebuffer 访问 | 图形驱动 | 直接操作显存 | 自定义渲染器调试 |
用户空间驱动访问 | 驱动交互 | 通过 /dev 节点操作硬件 | USB 设备识别、音频播放 |
技术点 | 所属模块 | 作用与说明 | 典型应用场景 |
---|---|---|---|
EGLFS 插件 | Qt 平台插件 | 基于 EGL 的无窗口系统渲染 | Qt 应用直接渲染到 framebuffer |
QWS ( Qt Window System ) | Qt 平台插件 | Qt3 遗留窗口系统,适用于旧设备 | 简单嵌入式 UI 界面 |
OpenGLES 2.0/3.0 | 渲染引擎 | GPU 加速绘图管线 | 实现高性能动画和界面 |
QPainter 渲染 | Qt 绘图 | CPU 渲染路径 | 低端设备或简单 UI |
Weston/Wayland | 窗口系统 | 替代 X11 的轻量级合成器 | 多窗口嵌入式应用 |
DRM/KMS 支持 | 显示接口 | 控制显示输出 | 双屏显示、GPU 输出控制 |
技术点 | 所属模块 | 作用与说明 | 典型应用场景 |
---|---|---|---|
Qt 源码交叉编译 | Qt 移植 | 编译适用于目标平台的 Qt 库 | 构建嵌入式 Qt SDK |
configure 参数配置 | Qt 移植 | 设置交叉编译工具链、平台参数 | 指定 -xplatform 和 -device |
裁剪 Qt 模块 | Qt 移植 | 减少不必要的模块依赖 | 减小最终镜像大小 |
静态链接 vs 动态链接 | Qt 移植 | 选择打包方式 | 便于部署或节省内存 |
EGLFS 插件配置 | Qt 平台 | 设置渲染后端 | 支持 GPU 加速 |
输入设备配置 | Qt 平台 | 配置触摸屏、鼠标、键盘 | 支持多点触控手势 |
QT_QPA_PLATFORM=eglfs | Qt 运行时 | 指定平台插件 | 强制使用 EGLFS 启动 |
技术点 | 所属模块 | 作用与说明 | 典型应用场景 |
---|---|---|---|
QWidget 基础控件 | Widgets | 快速实现传统 UI | 简单工业界面 |
QML + C++ 混合开发 | QML | 高效构建动态界面 | 智能家居、仪表盘 |
qmlRegisterType | QML | 注册 C++ 类型供 QML 使用 | 数据模型绑定 |
Q_INVOKABLE / Q_PROPERTY | QML | 导出方法与属性 | 与 QML 交互 |
触摸事件处理 | Input | 支持多点触控 | 手势识别、拖拽操作 |
QGestureRecognizer | Input | 自定义手势识别 | swipe、pinch、rotate |
QTimer 替代 sleep() | Core | 避免阻塞主线程 | 实现低功耗轮询机制 |
动画与状态机 | Animation | 提升用户体验 | 页面切换、按钮反馈 |
技术点 | 所属模块 | 作用与说明 | 典型应用场景 |
---|---|---|---|
内存占用优化 | Resource | 减少缓存、释放闲置资源 | 小内存设备上运行 |
静态链接减少依赖 | Build | 减少运行时依赖项 | 更易部署到裸板设备 |
背光控制 | Power | 控制屏幕背光亮度 | 降低功耗、延长电池寿命 |
休眠唤醒机制 | Power | 支持系统挂起与恢复 | 智能手表、手持设备 |
文件系统压缩 | Storage | 使用 SquashFS 或 OverlayFS | 减少 Flash 写入损耗 |
日志分级输出 | Debug | 控制日志级别 | 生产环境减少 IO 操作 |
技术点 | 所属模块 | 作用与说明 | 典型应用场景 |
---|---|---|---|
串口打印 qDebug 输出 | Debug | 查看 Qt 日志 | 无显示器调试 |
GDB + gdbserver | Debug | 远程调试嵌入式程序 | 定位崩溃、死锁问题 |
strace/ltrace | Debug | 跟踪系统调用 | 分析卡顿原因 |
perf 工具 | Debug | 性能分析 | 查找 CPU 占用热点 |
macdeployqt/windeployqt | Deploy | 自动复制依赖库 | 打包嵌入式 Qt 应用 |
AppImage / Flatpak | Deploy | 跨平台部署方案 | 一次性打包发布 |
项目类型 | 技术栈重点 | 推荐方向 |
---|---|---|
工业人机界面 (HMI) | QML + C++、EGLFS、触摸控制、数据可视化 | 仪表盘、报警提示、工艺流程监控 |
智能家居控制面板 | MQTT、QML、本地存储、夜间模式 | 控制家电、离线缓存、远程同步 |
医疗仪器界面 | 波形绘制、SQLite、USB 存储、权限管理 | 心率监测、数据导出 PDF/CSV |
教育类电子白板 | 手写识别、笔迹平滑、双缓冲绘图 | 教学演示、儿童教育产品 |
自动售货机 UI | 有限状态机、二维码识别、支付集成 | 商业终端设备界面开发 |
本项目内容均来源于互联网公开资料,仅供学习交流使用,版权归原作者所有。