Thanks to visit codestin.com
Credit goes to github.com

Skip to content

2025年 qt 开发最新总结,提供全面的 qt 开发学习资源,涵盖从基础知识到实战项目的资料、文献、书籍、项目和示例,帮助你快速入门并逐步进阶,持续更新维护中!

License

Notifications You must be signed in to change notification settings

0voice/Awesome_Qt_Learning

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

63 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🛠 Awesome_Qt_Learning

🌟 本仓库为一个面向开发者的 Qt 学习资源导航

💡 涵盖从基础知识到实战项目的资料与示例,帮助你快速入门、进阶


📌 目录


📖 简介

Qt 是一个跨平台的应用程序开发框架,被广泛应用于 桌面软件、嵌入式系统、移动应用 等领域。

本仓库整理了系统化的学习资料、工具与社区资源,帮助开发者更高效地学习和使用 Qt。


🌟 仓库一览

  • 提供 基础知识 + 工具框架 + 实战项目 的学习参考

  • 收录 学习资料、书籍、开源项目,避免信息碎片化


📚 学习资料

🍀 Qt 官方资料

Qt 官网https://www.qt.io/

Qt 官方文档https://doc.qt.io/

Qt GitHubhttps://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 学习指南

Qt 基础

Qt 是什么,能做什么

Qt 是一个开源的跨平台应用开发框架,由 C++ 编写而成。它不仅仅是一个 GUI(图形用户界面)库,更是一个完整的应用开发平台。它提供了丰富的 API 和工具,覆盖了从 UI 设计到网络通信、数据库、多媒体等几乎所有应用开发所需的功能。

Qt 最大的特点是 “一次编写,处处运行”(Write Once, Run Anywhere)。这意味着你用 Qt 编写的代码,可以轻松地编译和部署到多种操作系统上,包括 Windows、Linux、macOS、Android、iOS,甚至是各种嵌入式系统。这大大减少了跨平台开发的成本和工作量。


安装 Qt & Qt Creator

你可以从 Qt 官方网站下载 Qt 安装程序。安装时,你需要选择不同版本的 Qt 库和编译器工具链,以及其他所需的模块。对于初学者,建议选择最新的稳定版本,并勾选一个或多个主流平台的开发套件(比如桌面版 MinGW 或 MSVC)。

Qt Creator 是 Qt 官方提供的集成开发环境(IDE)。它专为 Qt 开发量身定制,集成了代码编辑器、UI 设计器、调试器、项目管理等功能。它能让你轻松创建、构建、运行和调试 Qt 项目。当你安装 Qt 时,Qt Creator 通常会作为默认选项一并安装。


项目结构(.pro / CMakeLists.txt)

Qt 项目主要有两种构建系统:QMakeCMake。它们都用于管理项目的编译和链接。

  • QMake: 这是 Qt 历史悠久的构建系统,使用 .pro 文件来描述项目。它语法简单,对 Qt 特性支持良好。一个典型的 .pro 文件会包含源代码文件列表、头文件、模块依赖以及其他编译配置。
    • 例如:SOURCES = main.cpp widget.cpp 表示项目包含这两个源文件。
  • CMake: CMake 是一个更通用的、跨平台的构建系统,使用 CMakeLists.txt 文件。CMake 功能强大,灵活性高,被越来越多的现代 C++ 项目所采用,Qt 也对它提供了很好的支持。对于大型或需要与其他 C++ 库集成的项目,CMake 往往是更好的选择。

核心机制

QObject 与内存管理

QObject 是 Qt 对象模型的核心类,几乎所有 Qt 类都直接或间接继承自它。QObject 提供了两个非常重要的功能:

  1. 父子关系(Parent-Child Relationship): 当一个 QObject 实例被创建时,你可以指定它的父对象。如果父对象被销毁,它会自动销毁所有子对象。这种机制有效地解决了内存泄漏问题,你无需手动管理每一个对象的生命周期,只需关注顶层对象的销毁即可。
  2. 信号与槽机制: 这是 QObject 提供的另一个核心特性,下面会详细介绍。

信号与槽(Signals & Slots)

信号与槽是 Qt 中实现对象间通信的一种高级机制,它是一种类型安全的、松耦合的事件处理方式。

  • 信号 (Signals): 信号是一种特殊的函数,当某个事件发生时(例如用户点击了按钮),它会被“发射”出来。信号只有声明,没有实现,由 moc(元对象编译器)自动生成。
  • 槽 (Slots): 槽是普通的 C++ 函数,用于响应信号。当一个信号被连接到一个槽上时,只要信号被发射,对应的槽函数就会被自动调用。

你可以使用 QObject::connect() 函数将一个对象的信号连接到另一个对象的槽。这种机制的好处是,信号的发送者和槽的接收者彼此无需知道对方的细节,从而实现了高度的解耦。


元对象系统(QMetaObject / Q_PROPERTY)

元对象系统是 Qt 框架的基石,它扩展了标准 C++,提供了反射、内省(introspection)和运行时类型信息等高级功能。QObject 的许多核心特性,如信号与槽、动态属性等,都依赖于元对象系统。

  • Q_OBJECT: 凡是需要使用信号与槽、动态属性等元对象特性的类,都必须在类声明中加上这个宏。
  • Q_PROPERTY: 这个宏允许你在类中定义“动态属性”,这些属性可以像普通的成员变量一样读写,但同时具有元对象系统的特性,可以被信号槽和 QML 等访问。

事件与事件循环(QEvent / QCoreApplication)

事件 (QEvent) 是用户操作、系统消息等在 Qt 应用中产生的各种“事件”。例如,鼠标点击、键盘输入、窗口大小改变等,都会被封装成一个 QEvent 对象。

事件循环 (Event Loop) 是 Qt 应用的“心脏”。它由 QCoreApplication::exec()QApplication::exec() 函数启动。事件循环会不断地从事件队列中获取事件,并将其分发给相应的对象进行处理。这是一种典型的非阻塞编程模式,使得你的应用可以同时响应多种事件,而不会被某个耗时操作所阻塞。


界面开发

Qt 提供了两种主流的 UI 开发技术:Qt WidgetsQt Quick/QML。它们各有优势,适用于不同的开发场景。了解它们的不同,可以帮助你选择最适合你项目的技术栈。

Qt Widgets

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 / QML

Qt Quick 是一种现代的、基于声明式编程的 UI 开发技术。它使用 QML 这种类似 JavaScript 的语言来描述 UI。Qt Quick 特别适合开发现代、流畅、动画效果丰富的应用,尤其是在移动端和嵌入式设备上。

  • QML 语法基础 (属性、信号、绑定、动画):QML (Qt Modeling Language) 是一种声明式语言。你通过属性(如 widthheightcolor)来定义界面元素,通过信号(如 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++ 后台线程中。合理使用 LoaderRepeater 等组件来按需加载和复用元素,从而减少内存和 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++ 后台,并使用 LoaderRepeater 等组件来按需加载和复用 UI 元素。

工具与生态

除了强大的框架本身,Qt 还有一个完善的工具链和活跃的生态系统。这些工具能极大地提高开发效率,而丰富的第三方库则能帮助你快速扩展应用功能。

Qt Creator IDE

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 桌面开发和 Qt 嵌入式开发。每条路线均包含从基础语法到高级特性的完整技术栈,并结合现代 C++ 新特性与工程实践技巧,帮助你构建扎实的 Qt 开发能力。

✅ 开发环境准备

操作系统选择

  • Windows、Linux、macOS 都支持 Qt 开发,根据项目需求和个人偏好选择合适的操作系统

  • 对于 Linux 用户,推荐使用 Ubuntu 或者 Fedora 等流行发行版,因其社区活跃度高,遇到问题更容易找到解决方案。

安装 Qt SDK

  • 访问 Qt 官网下载适合你操作系统的在线安装包或使用网盘里的离线安装包

  • 使用 Qt Maintenance Tool 进行组件管理(如添加/移除 Qt 版本、工具等)。

  • 推荐至少安装一个 LTS 版本的 Qt(长期支持版本),以及最新稳定版,以便能够覆盖更多的应用场景和技术特性。

集成开发环境(IDE)选择

  • 安装插件增强功能,例如 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)提高工作效率。


Qt 桌面开发技术栈

基础语言能力要求

技术点 所属模块 作用与说明 典型应用场景
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 请求、数据流处理

Qt 核心模块(QtCore)

技术点 所属模块 作用与说明 典型应用场景
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

图形界面模块(QtGui)

技术点 所属模块 作用与说明 典型应用场景
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 图形变换矩阵(缩放、旋转) 动画效果实现

控件与布局(QtWidgets)

技术点 所属模块 作用与说明 典型应用场景
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 属性动画,实现平滑过渡 按钮弹跳、页面切换动画

多线程与并发(QtCore + QtConcurrent)

技术点 所属模块 作用与说明 典型应用场景
QThread Thread 创建独立线程运行任务 长时间后台任务(如下载)
moveToThread Thread 将对象移动到指定线程 网络请求、数据库访问
QRunnable + QThreadPool Thread 可复用线程池执行一次性任务 多个图片加载任务并发处理
QtConcurrent::run Concurrent 高级封装,简化异步调用 快速启动后台任务
QFuture & QFutureWatcher Concurrent 监听异步任务状态 显示任务进度条
QMutex、QWaitCondition Thread 线程同步机制 多线程共享资源保护
QAtomicInt、QAtomicPointer Thread 原子操作,线程安全 计数器、标志位设置

文件与数据流操作(QtCore)

技术点 所属模块 作用与说明 典型应用场景
QFile IO 文件打开、读写、复制 本地配置文件、日志写入
QTextStream IO 文本格式读写,支持编码转换 UTF-8、GBK 文件读写
QDataStream IO 二进制格式序列化/反序列化 保存用户数据、网络传输
QSettings IO 本地配置保存 用户偏好设置、窗口位置记忆
QTemporaryFile IO 创建临时文件,程序退出自动清理 缓存文件、中间结果存储
ZIP 支持(第三方) IO 文件压缩解压 导出项目包、备份数据

网络通信(QtNetwork)

技术点 所属模块 作用与说明 典型应用场景
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 设置代理服务器 穿透防火墙、测试环境模拟

数据库支持(QtSql)

技术点 所属模块 作用与说明 典型应用场景
QSqlDatabase Sql 连接数据库(SQLite、MySQL、PostgreSQL) 本地缓存、用户数据存储
QSqlQuery Sql 执行 SQL 语句,支持参数绑定 数据增删改查
QSqlTableModel Sql 数据库模型绑定视图 表格控件自动刷新
QSqlRelationalTableModel Sql 支持外键关系映射 主从表数据绑定
ORM(可选) Sql 使用第三方库如 QtOrm 实现对象关系映射 简化数据库操作
数据库连接池 Sql 管理多个数据库连接 高并发场景下的数据库访问优化

多媒体模块(QtMultimedia)

技术点 所属模块 作用与说明 典型应用场景
QSoundEffect Multimedia 播放短音频文件 按钮点击音效、提示音
QAudioOutput Multimedia 音频播放组件 播放 MP3、WAV 文件
QMediaPlayer Multimedia 视频播放器 播放 MP4、AVI 视频
QCamera Multimedia 调用摄像头设备 视频采集、人脸识别
QMediaRecorder Multimedia 录制视频或音频 视频录制功能实现
FFT 分析 Multimedia 音频分析与可视化 音乐可视化、频谱显示

浏览器嵌入(QtWebEngine)

技术点 所属模块 作用与说明 典型应用场景
QWebEngineView WebEngine 内嵌浏览器控件 展示网页内容、在线帮助文档
evaluateJavaScript WebEngine 执行 JS 脚本 页面动态控制、数据提取
QWebEngineUrlRequestInterceptor WebEngine 拦截网页请求 过滤广告、替换资源
QWebEngineCookieStore WebEngine 管理 Cookie 登录状态保持
WebRTC 支持 WebEngine 音视频通信功能 实现实时视频会议功能

插件系统(QtPlugin)

技术点 所属模块 作用与说明 典型应用场景
插件接口设计 Plugin 使用纯虚类定义插件接口 插件框架设计
Q_PLUGIN_METADATA Plugin 注册插件元数据 动态加载插件
QPluginLoader Plugin 加载 DLL/Dylib 插件 实现热插拔机制
插件部署 Plugin 构建插件目录结构 支持插件化架构
插件管理 Plugin 实现插件注册中心 插件启用/禁用管理

国际化与本地化(i18n)

技术点 所属模块 作用与说明 典型应用场景
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 调试器 断点调试、变量查看

Qt 嵌入式开发技术栈

嵌入式系统基础

技术点 所属模块 作用与说明 典型应用场景
交叉编译环境搭建 系统配置 编译目标平台可执行程序 在 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 库 构建嵌入式 Qt SDK
configure 参数配置 Qt 移植 设置交叉编译工具链、平台参数 指定 -xplatform 和 -device
裁剪 Qt 模块 Qt 移植 减少不必要的模块依赖 减小最终镜像大小
静态链接 vs 动态链接 Qt 移植 选择打包方式 便于部署或节省内存
EGLFS 插件配置 Qt 平台 设置渲染后端 支持 GPU 加速
输入设备配置 Qt 平台 配置触摸屏、鼠标、键盘 支持多点触控手势
QT_QPA_PLATFORM=eglfs Qt 运行时 指定平台插件 强制使用 EGLFS 启动

Qt 嵌入式 GUI 开发技术栈

技术点 所属模块 作用与说明 典型应用场景
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 有限状态机、二维码识别、支付集成 商业终端设备界面开发

免责声明

本项目内容均来源于互联网公开资料,仅供学习交流使用,版权归原作者所有。

About

2025年 qt 开发最新总结,提供全面的 qt 开发学习资源,涵盖从基础知识到实战项目的资料、文献、书籍、项目和示例,帮助你快速入门并逐步进阶,持续更新维护中!

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •