QtExamples
Qt 之 GUI 控件使用 / 网络 / 架构原理 / 运行机制理解;DTK 重绘控件方式的框架解析;IDE 技巧之 Visual Studio / Qt Creator;此为系列文章教程
- 零基础或刚入门的 Qt/C++ 学习者 - 想从“看教程”走向“做项目”的开发者 - 需要系统梳理 Qt 工程化与发布流程的同学 The project is written primarily in SWIG, distributed under the Apache License 2.0 license, first published in 2019. It has gained significant community traction with 4,006 stars and 831 forks on GitHub. Key topics include: dtk, gui, network, qt, skill.
我也不知道为什么,当初就是想放这么一张图在这里~
QtExamples
面向 C++/ Qt 入门者与转行学习者的 Qt 学习与项目仓库,兼顾入门与进阶的系统路径。
适合人群
- 零基础或刚入门的 Qt/C++ 学习者
- 想从“看教程”走向“做项目”的开发者
- 需要系统梳理 Qt 工程化与发布流程的同学
你将获得
- Qt 基础控件、网络编程、工程化与发布流程
- Deepin / UOS 的 DTK 与自定义样式的底层理解
- 一条可循的学习路径与丰富的项目参考
阅读方式
- 想快速上手:从第 1 章开始,按系统与 IDE 配好环境
- 想专项突破:直接跳到对应章节
- 想看作品与案例:先看“热门作品”和第 10 章
快速导航
项目介绍
- Qt GUI 基础控件与常见网络编程
- DTK 重绘控件与样式机制的框架解析
- Qt Creator 与 Visual Studio 的实用技巧
- Qt 原理与运行机制的系统理解
这是个人学习与实践的记录,也希望与更多同路人交流分享。
构建环境
源码与文章均托管于本仓库,主线聚焦 Qt 5/6 与 Linux 基础及系统编程。
- 开发系统:
macOS 10.14-15.x/Windows 10-11/UOS/Deepin 20-25 - 编码软件:
Qt 5.x-6.x/Visual Studio 2015-2026
热门作品
较火/高规格的完整项目(第 10 章)
- 极简的电脑管家,一键关闭 Windows Defender (Anti-Virus). 【windows-defender-close】[★★]
截图三部曲(难 → 易)
- SunnyCapturer 跨平台截图软件,支持离线 OCR、图片翻译、贴图、钉图 [★★★★★ 2023-2026]:SunnyCapturer 官网
- FLIPPED 一款简易且漂亮的跨平台截图和贴图的软件 [★★★]
- ShotX 一个轻量级的跨平台截图 [★]
- 简洁且易用的 ChatGPT & AI 桌面应用 ThinkyMate(无需登录) [★★★★★ 2024]
- Sunny 截图上架 Microsoft Store 及 Linux 等商店的指北
- 分享如何拥有一份私人的开源代码签名证书
楔子
新手过来
入门阶段常见的困惑大致如下:
- 语法不熟,能看懂却写不出
- IDE 安装、配置、建项目一头雾水
- 基础控件不认识,不知道如何组合成界面
- 内容碎片化,缺少可系统阅读的资料
- 学了很久仍不清楚“在学什么、下一步做什么”
分享所想
- 重新系统梳理 GUI 与工程化实践
- 帮助新手从 0 到 1,解决入门阶段最常见的问题
- 学习于网络,回馈于网络
- 以可检索的方式沉淀为长期可用的资料
Star History
热爱开源
虽不盈利,也会辛苦,但因自由与开源而坚持记录。
贡献捐赠
如果这个仓库帮你节省了时间、解决了问题,欢迎支持。每一份赞助都会用于持续整理与更新,也是继续投入的动力:
- 点个 Star / Fork,让更多人看到
- 分享给需要的人
- 赞助一杯饮料,支持持续更新
正文
1-预备知识
Windows 系统
- 在 Windows 10 环境下安装 Qt Creator 5.9.8 作 C++ 的 IDE 开发工具
- Qt Creator 安装 SDK,在 MSVC 编译模式下使用 CDB 调试器
- Windows 10 安装 Qt Creator + Visual Studio 2015 作为 C++ 的 IDE 开发工具
- Visual Studio 2017 专业版使用最新版 Qt 5.9.2 教程
- Windows 10 安装 CLion + CMake + MSVC / MinGW 作 Qt 开发
macOS 系统
Linux 系统
- Windows 10 的 VMware 中安装 UOS 20,在 UOS 中安装 Qt Creator 及搭建 DTK 开发环境
- macOS 安装 Parallels Desktop,再安装 UOS 20 + Qt Creator,及搭建 DTK 开发环境
- macOS 的 VMware Fusion 中安装 Linux Deepin15.11
- Deepin / UOS 中配置 DTK 开发环境
- 重装 UOS / Deepin V20 后必安装软件(个人习惯)
- ArchLinux + DDE 安装教程
- 对 GNU/Linux 介绍、ArchLinux社区氛围、DDE移植Arch流程
通用命令交互
- Shell、Bash、CMD、PowerShell 的区别
- Windows-Terminal 配置 OhMyPosh 美化 GitBash
- Windows 打造颜值和实用可媲美 Linux 的终端:Pwsh7 + OhMyPosh
IDE 对 Qt 源码函数进行单步调试
2-Qt 生成原理和运行机制
3-常规 GUI 控件
原生控件
- 一个默认的
Qt Widget项目 【空】 - 元对象系统 MOC (Meta-Object System) 的对象 MetaObject 和(含动态)属性 Property 的用法 【QtMeatObjectEx】
- QString 在2 /8/10/16 进制之间转换 【QtQStringEx】
- QString 常用的功能函数的介绍及用法 【QtQStringFunEx】
- QSlider + QAbstractSlider 滑动条的介绍及用法【QtQSliderEx】
- QSlider + QScrollBar + QProgressBar (移动条、滚动条、进度条)的联动【QtQProgressBarEx】
- QSlider 仪表盘 + QLCDNumber 数值显示 的介绍及用法【QtQdialQLCDEx】
- QTime / QDate / QDateTime 时间日期 + QTimer 定时器的介绍及用法【QtDateTimeEx】
- QComboBox 下拉列表框 + QPlainTextEdit 多行富文本编辑器的介绍及用法 【QtQcomboBoxEx】
- QListWidget 列表控件 + QToolButton 工具按钮的介绍及用法【QtQListWidgetEx】
- QTreeWidget 目录树组件 + QDockWidget 停靠区域组件的介绍及用法【QtQTreeWidgetEx】
- QTableWidget 表格组件的介绍及用法【QtQTableWidgetEx】
- QFileSystemModel 数据模型获取本机文件系统用法【QtQFileSystemModelEx】
- getOpenFileName 标准对话框和自定义对话框的用法【QtQDialogEx】
- QTableView 表格视图 + QStandardItemModel 标准项模型的用法【QtQStandardItemModelEx】
- 自定义和标准对话框的用法【QtCustomDialogEx】
- MDI(Multi-document Interface) 多文档界面的实现 + QMdiArea 的用法【QtMDIEx】
- 创建 QKeySequenceEdit() 后,显示方块■◆乱码
- Qt 修改
*.svg文件的颜色【ExChangeSVGColor】
高级自绘和组合控件
- Qt 使用亚克力的透明磨砂效果的窗口思路和解决方案,三种实现思路,支持全平台 【AcrylicWindow】
- 使用 QListWidget 创建的一个 气泡聊天窗口消息的控件 BubbleMessage,且自适应大小 【BubbleChat】 [★★★★]
4-网络编程
- QHostInfo 主机信息查询 + QNetworkInterface 查询 IP 等【QtQHostInfoEx】
- TCP 通信之 QTcpServer + QTcpSocket,服务器和客户端通讯【QtTcpEx】
- UDP 通信之 QUdpSocket + unicast 单播 / broadcast 广播 / multicast 组播【QtUdpEx】
- QNetworkAccessManager + QNetworkReply + QNetworkRequest 协同实现高层网络的操作 HTTP 【QtHttpEx】
5-DTK 重绘控件原理解析-自定义 QStyle
DTK 历史发展
- DTK 的历史起源、发展,和简单入门 [★★]
- Deepin、DDE 的历史起源与发展(附 Deepin 所有版本的 DDE 效果图) [★★]
- UOS/Deepin 中配置 DTK 开发环境 [★]
- Deepin / DTK 文档参考资料集合 [★★★]
背景知识
- QStyle 与 QPen、QPush、QPalette、QPainter 之间的区别
- DTK 基础教程:自定义控件规范 [★]
- QStyle 设置界面的外观和 QCommonStyle 继承关系图讲解和使用 [★★]
- Qt 之 proxy() 代理函数探究
感性理解
- Qt 控件在 UOS 20 + macOS 10.14 下的显示不同的 QStyle「即样式换肤效果」
- Qt 控件在 Windows 10 + Deepin 10.15 下的显示不同的 QStyle「即样式换肤效果」
DTK 源码解析架构
- QStyle / DTK 重绘 Qt GUI 已有控件,举例 QScrollBar [★★]
- QStyle / DTK 重绘自定义需求控件,举例 MySwitchButton [★★]
- DTK 基础教程:自定义控件规范 [★★]
- DTK 常用和测试代码片
- DTK 每日自动更新其 API 文档
DTK 项目实战
- 更换 Qt 应用程序的界面 UI,实现换肤,展示自带其它 QStyle 样式
- QStyle 自定义重绘 QScrollBar
- QStyle 自定义重绘 QRubberBand 控件
- QStyle 自定义重绘滑动条 QSlider 控件
- QStyle 自定义重绘滑动条 QSlider 控件二
- QStyle 重绘时 sizeFromContents() 未被调用的分析
- QStyle 之 PenStyle 的 CustomDashLine 使用
- Deepin 开发任务栏网速插件 lfxSpeed [★]
- Deepin 任务栏网速插件推荐 NetSpeed (重构 lfxSpeed) [★★]
- Deepin 自定义修改窗口圆角大小 [商业开源项目示例 ★★]
- Deepin 愿望墙:社区插件等需求调研结果 [社区练手参考]
6-Qt IDE 乱码根因和解决
此两篇足够
- 极简图表解释:古文码、口字码、符号码、问号码、棍拷码 [★★★★★]
- 极繁根因分析:愿编程不再乱码(含Qt)-根因深究 [★★★★★]
- 字符、字节、编码详细讲解
产出 “极繁根因分析” 一文的途中的曲折认知
7-IDE 技巧
Qt Creator
- Qt Creator 界面的基本组成简介和入门使用讲解(Win + Linux + macOS)
- Qt Creator 设置代码美化 Astyle 之 Artistic
- Qt Creator 关闭 .cpp 文件右侧的黄色警告
- Qt Creator 中自定义项目例子置于“欢迎-实例”中
- Qt 项目用 Doxygen 生成 .qch,嵌入文档到 Assistants
- 小技巧:Design 设计师里,无法拖拽 action 到 toolbar 里
- 小技巧:Qt Creator 用快捷键秒实现,声明在基类中重写的派生类(纯)虚函数
- 小技巧:设置 QToolBox 的每一页 page 的使用单独的布局(QTabWidget 同理)
- [小技巧:使用 Qt Design 提升自定义控件,报错找不到头文件,<Qt Creator
- 经验1>](./WINDOWS_MSVC_MinGW%20%26%20LINUX_GCC%20%26%20MACOS_CLANG%20所遇到奇葩问题集锦.md)
Visual Studio
- VS2017 调试 Qt 源码,安装 PDB
- VS2019 调试 Qt 5 时 QString 显示为内存地址而非字符串
- VS2022 And Qt Creator 10调试Qt 源码教程 [★★★★★]
- Visual Studio 实际仅增删数行,却显示文件所有行均发生变更
- Visual Studio 生成 .vs 隐藏文件夹,导致 Git 命令错误
- Windows 10 的 20H2 使用 VS 2019,拖曳窗口会崩溃
- Visual Studio 2019 进行远程调试
- Visual Studio 断点调试之箭头偏移进错函数,捉🐛记
- 微软 SDK 导致的项目编译失败哦~
- 一个微软自带的 Notepad 所导致的问题 【ExCRLF】
WinDbg 调试
8-提交规范和发布 Qt 程序
- 约定式提交规范
- 修改 Doxygen 主题,生成 Qt 风格的文档
- Qt 项目在 Windows 平台上面发布成可执行程序
- Qt 项目在 macOS 平台上面发布成可执行程序
- Qt 项目在 Linux 平台上面发布成可执行程序
- Linux 中用 dh_make 将 Qt + CMake 项目打包为 deb 文件
上架 App Store
9-高级编程
- Lambda 表达式详解
- Qt 信号和槽原理分析,手写实现信号和槽,模拟 moc 生成 moc_xxx.cpp 过程 [★★★]
- Qt 项目 CMake 设置国际化支持
- Qt 4 和 Qt 5 的信号和槽的用法差异
- 高分屏、分辨率、DPI、PPI,及 Qt 处理高分屏 [★★]
- 如何给上游 Qt 提交 BUG 反馈和贡献代码 PATCH? [★★★★]
- 如何构建 Qt 5(5.15)
- 在 Mac 编译成功运行 Qt 5.15 源码:Debug + Release 版本
10-商业级项目
更多项目介绍参见 Product
高规格项目
- 极简的电脑管家,一键关闭 Windows Defender (Anti-Virus). 【windows-defender-close】[★★]
- 简洁且易用的 ChatGPT & AI 桌面应用 ThinkyMate(无需登录) [★★★★★ 2024]
- Sunny 截图上架 Microsoft Store 及 Linux 等商店的指北
- 分享如何拥有一份私人的开源代码签名证书
截图三部曲(难 → 易)
- SunnyCapturer 跨平台截图软件,支持离线 OCR、图片翻译、贴图、钉图 [★★★★★ 2023-2026]:SunnyCapturer 官网
- FLIPPED 一款简易且漂亮的跨平台截图和贴图的软件 [★★★]
- ShotX 一个轻量级的跨平台截图 [★]
新人友好的项目
- 项目实战:仿 QQ 的单聊,属 GUI 界面
- 项目实战:仿 QQ 的群聊,属 GUI 界面
- 项目实战:C 语言写 Socket 的 TCP 聊天,属 CUI 控制台
- 项目实战:C 语言写 Socket 的 UDP 聊天,属 CUI 控制台
- 项目实战:Qt 5 的 Quick 仿写 QQ 2019 简洁版的登录界面,含 GUI 界面
- Qt 5/C++ 项目:Qt 象棋【初版】 [★★★★★]
- Qt 5/C++ 项目:基于 Qt 的跨平台网络对战象棋(一) [★★★★★]
- Qt 5/C++ 项目:基于 Qt 的跨平台网络对战象棋(二) [★★★★★]
- Qt 5/C++ 项目:基于 Qt 的跨平台网络对战象棋(三) [★★★★★]
硬件
11-服务器开发之 Linux 基础编程
建议环境:UOS 20 (Debian8+) / gcc,g++ 8.3.0 / gdb 8.0,或 macOS 10.14.6 / gcc,g++ 9.2.0 / gdb 8.3
GCC/G++
- 在macOS上面通过brew命令安装gcc编译器集 【unix_linux_01_test_gcc】
- gcc和g++的区别,编译.c和.cpp文件的区别 【unix_linux_02_c_cpp】
- gcc工作流程:预处理,编译,汇编,链接 【unix_linux_03_gcc_workflow】
- Linux下使用gcc生成静态库.a和调用(图文并茂,坑已踩完) 【unix_linux_04_make_so_a】
- Linux下使用gcc生成动态库.so和调用(图文并茂,坑已踩完) 【unix_linux_04_make_so_a】
- 在Linux中,编写入门的makefile文件,然后逐渐迭代 【unix_linux_05_makefile】
GDB
- 在macOS 10.14.6安装最新gdb8.3的详细教程,含可能遇到的所有坑(网上最新教程) 【unix_linux_06_gdb】
- gdb调试器的使用,初探全貌 【unix_linux_06_gdb】
程序运行原理,文件描述符,PCB
- Linux中文件操作,软硬链接ln,用户权限chmod、chown,文件查找和检索find、grep,压缩gz,bz2
- Linux中虚拟地址空间、pcb、文件描述符、C库函数工作流程、标准库和系统库函数区别
- Linux中man手册,阻塞和非阻塞,stat,文件操作和遍历,文件描述符复制dup() 【unix_linux_07_sysfun】
12-服务器开发之 Linux 系统编程
进程间通信
- Linux中fork创建兄弟子进程,验证进程之间全局变量不共享,exec函数族 【 unix_linux_08_fork / unix_linux_09_exec 】
- Linux中孤儿进程,僵尸进程,进程回收wait、waitpid函数 【unix_linux_10_orphan_zombie_process】
- 父子进程、兄弟子进程之间通信方式--匿名管道pipe(适用于有血缘关系的进程) 【unix_linux_11_pipe】
- Linux中普通的进程间通信方式--有名管道fifo(适用于无血缘关系的进程) 【unix_linux_12_fifo】
- Linux中进程间的通信方式--内存映射区mmap() 【unix_linux_13_mmap】
信号和守护进程
- Linux中系统信号初识,和函数kill,raise,abort,alarm,setitimer 【unix_linux_14_signal】
- Linux中未决信号集和阻塞信号集的状态关系sigaddset,以及捕捉信号函数 【unix_linux_15_sys_usr_signal】
- Linux中创建守护进程setsid() 【unix_linux_16_daemon】
多线程
- Linux中创建多线程实例pthread_create() 【unix_linux_17_thread】
- Linux中多线程操作函数pthread_exit()、pthread_jion()、pthread_detach()、pthread_cancel() 【unix_linux_17_thread】
- Linux中使用使用互斥量(锁)Mutex来操持多线程同步执行pthread_mutex_lock() 【unix_linux_18_mutex】
- Linux中原子操作,死锁原因以及解决方法,读写锁的属性和函数使用pthread_rwlock_wrlock() 【unix_linux_19_pthread_rwlock_wrlock】
- Linux中多线程使用条件变量阻塞线程,和pthread_cond_wait()函数使用 【unix_linux_20_conditton】
- Linux中多线程使用信号量(信号灯),和sem_wait()函数使用 【unix_linux_21_semaphore】
13-服务器开发之 Linux 网络编程
- 感觉基础的网络理论基础知识已会,写过一些实战项目的代码,可以参考第 10 章部分;后面深入底层网络完成,有空再整理文章。
- 见本仓库的
unix_linux_基础知识_性能优化_操作系统原理_高清图谱.jpg文件 - Linux / Unix 学习完整系列(基础 / 编译 / 进程间通信 / 信号 / 守护进程 / 多线程等:可见 linuxExample
14-Windows 系统开发验证代码
- 对 C++ 和 WebView 的程序开启能效模式,降低 CPU 和功耗【win_01_efficiency_mode】
- 获取显卡和驱动的版本【win_02_get_gpu_version】
15-研发遇到的疑难杂症经验
许可协议
<img src="https://fastly.jsdelivr.net/gh/XMuli/xmuliPic@pic/2023/20230618194948.png" width="50%"/>博客代码基于 Apache License 2.0 协议进行分发和使用,更多信息参见 协议文件。所含文章使用以下协议进行保护:署名-非商业性使用-禁止演绎。
Contributors
Showing top 3 contributors by commit count.
