Qt学习之路:从零开始掌握C++跨平台开发
发布时间:2026/10/24 11:16:29 锦皓数字建站

简介这份《QT学习之路2-2020整理版》面向希望系统掌握Qt框架的开发者尤其适合从入门过渡到进阶的C程序员。内容基于豆子博客整理在原有79章基础上补充了2016年后更新的15章共94章覆盖Qt简介、信号槽机制、自定义信号槽、MainWindow、布局管理器、事件处理、对话框数据传递等核心主题并延伸至多线程、国际化、数据库集成与网络编程等高级方向同时涉及Qt Creator使用与调试技巧。资源为单个PDF文件压缩包约5.79MB目录结构清晰便于按章节顺序学习或按主题检索。目前已有870人学习。读者可借助这份教程理解Qt5与Qt Creator的工程实践掌握信号槽、事件模型、界面布局等关键机制并了解实际项目中的常见用法与最佳实践适合作为长期查阅的参考手册。1. 从零开始学 Qt为什么一个 C 框架值得你花时间很多人第一次听到 Qt脑子里冒出来的第一个问题不是“它是什么”而是“我到底该不该学”。尤其是刚接触编程不久的朋友看到 C、框架、跨平台这些词心里先凉了半截。其实换个角度想你想做一个能在 Windows 上跑、也能在 Mac 上跑、甚至能塞进一块小屏幕设备里的程序如果每种系统都从头写一遍光是适配就能把人逼疯。Qt 就是来解决这个问题的——写一套代码编译到不同平台界面和功能都能正常跑起来。这份《QT学习之路2-2020整理版》一共 94 章从最基础的“Hello, world!”一路讲到多线程、数据库、网络、QML是一份按顺序啃下来就能建立完整认知的教程。它适合谁适合已经学过一点 C、想找个方向动手做界面程序的新手也适合以前用过其他 GUI 库、想换到 Qt 但不知道从哪一页翻起的人。你不需要先把 C 学到精通再来边学 Qt 边补 C 是完全可行的路径。2. 先搞懂 Qt 到底是什么别被“框架”两个字吓住2.1 用大白话讲Qt 不是一门语言是一整套工具箱你可以把 C 想象成一种“通用材料”而 Qt 是一整套已经做好的“零件箱”。里面有小到按钮、输入框大到网络通信、数据库读写、多线程调度的各种零件。你写程序的过程就是从箱子里挑零件、拼起来、再补上自己的逻辑。它最核心的几个特点用新手能听懂的话来说就是跨平台同一份代码在 Windows 上编译一次在 Linux 上再编译一次界面和功能基本一致。不用为每个系统重写一遍。信号槽这是 Qt 最出名的机制。你可以理解为“当 A 发生什么事自动通知 B 去做另一件事”。比如用户点了按钮窗口就关掉——按钮发出“被点了”的信号窗口的“关闭”槽函数接住这个信号并执行。自带全套工具字符串处理、文件读写、XML/JSON 解析、数据库连接、网络请求Qt 都内置了对应的类。你不用再满世界找第三方库也不用纠结版本兼容。Qt 的界面并不是调用系统原生控件画出来的而是自己模拟绘制的。好处是外观可以高度定制坏处是某些细节和系统原生风格有细微差别。但对新手来说这个差别在入门阶段基本可以忽略。2.2 为什么 2020 整理版值得看94 章不是凑数网上流传的 Qt 教程很多但大部分要么只讲到 70 多章就断了要么是零散的文章合集前后不连贯。这份整理版把原来 79 章之后的内容补到了 94 章覆盖了 QML、Qt Quick、线程和 QObject 的关系、进程间通信这些进阶但必须了解的主题。它的结构是按学习路径排的先环境搭建再信号槽再窗口部件再文件、模型视图、数据库、网络最后到 QML。你不需要跳着看顺着章节号往下走就行。提示如果你完全没接触过 C 的类、继承、函数这些概念建议先花两三天补一下最基础的语法。不用学到模板、智能指针那种程度能看懂 class 定义和函数调用就够了。3. 新手第一步怎么迈环境搭好第一个窗口跑起来3.1 安装 Qt Creator别在版本选择上纠结太久Qt 的安装包现在整合得比较好你只需要下载 Qt 官方提供的在线安装器勾选一个 Qt 版本和对应的编译器就行。对于新手我建议直接选 Qt 5 的某个稳定版本配套的编译器在 Windows 上选 MinGW在 Linux 上选系统自带的 GCC。安装过程中会问你要不要装源代码新手可以先不装省空间也省时间。安装完成后打开 Qt Creator你会看到一个很清爽的界面。左边是项目文件树中间是代码编辑区下面是编译输出窗口。第一次打开可能会让你选 kits其实就是“用哪个 Qt 版本 哪个编译器”的组合默认的就行。3.2 第一个例子三行代码弹出一个窗口新建项目时选 “Qt Widgets Application”给项目起个名字比如HelloQt。Qt Creator 会自动生成几个文件其中main.cpp是程序入口。把里面的内容改成下面这样#include QApplication #include QLabel int main(int argc, char *argv[]) { QApplication app(argc, argv); // 管理整个应用程序的资源 QLabel label(你好Qt); // 创建一个标签控件显示文字 label.show(); // 把控件显示出来 return app.exec(); // 进入事件循环等待用户操作 }逐行解释一下QApplication是每个 Qt 程序都必须有的对象它负责处理事件循环、系统资源这些事情。QLabel是一个最简单的界面控件用来显示一行文字。label.show()让它可见。最后的app.exec()会让程序停在这里不断接收鼠标点击、键盘输入等事件直到你关闭窗口。点左下角的绿色三角编译运行你应该能看到一个很小的窗口上面写着“你好Qt”。恭喜你已经跑通了第一个 Qt 程序。这个窗口虽然简陋但它背后已经包含了 Qt 最核心的几件事应用程序对象、控件、事件循环。3.3 从“能跑”到“看懂”信号槽的第一印象第一个例子没有用到信号槽但你可以马上试一个。把main.cpp改成这样#include QApplication #include QPushButton int main(int argc, char *argv[]) { QApplication app(argc, argv); QPushButton button(点我关闭); // 创建一个按钮 QObject::connect(button, QPushButton::clicked, // 信号按钮被点击 app, QApplication::quit); // 槽应用程序退出 button.show(); return app.exec(); }这里connect函数把按钮的clicked信号和应用程序的quit槽连接起来。你点按钮程序就退出。信号槽的语法在 Qt 5 里推荐用这种“函数指针”写法编译器能帮你检查参数类型是否匹配比旧版写法更安全。第一次看到QPushButton::clicked可能觉得怪把它当成“按钮被点击这件事的名字”就行。注意如果你用的是 Qt 4 的旧语法SIGNAL(clicked())和SLOT(quit())也能跑但新手直接学 Qt 5 的新语法就好更清晰也更不容易写错。4. 避开新手最容易翻车的五个坑4.1 坑一编译报错 “undefined reference to vtable”现象写了一个继承自QObject的类编译时提示虚函数表找不到。原因Qt 的信号槽需要 moc元对象编译器预处理。如果你的类声明了Q_OBJECT宏但没有把该文件加入项目或没有重新运行 qmakemoc 就不会生成对应的代码。解决在 Qt Creator 里右键项目选择“执行 qmake”然后重新构建。如果还不行检查类定义是否真的写了Q_OBJECT宏并且类继承自QObject或其子类。4.2 坑二界面能显示但按钮点了没反应现象按钮、菜单都画出来了点击却没有任何动作。原因信号和槽没有连接成功或者连接的时机不对。比如在对象还没构造完就去 connect或者槽函数的参数和信号不匹配。解决先检查connect的返回值它在失败时返回false。再检查信号和槽的参数列表是否一致参数个数和类型都要对得上。如果用的是自定义信号槽确认信号和槽都声明在signals:和slots:区域下。4.3 坑三程序一运行就崩溃提示 “QWidget: Cannot create a QWidget without QApplication”现象在main函数里创建控件之前没有先创建QApplication对象。原因所有 Qt 的界面控件都依赖QApplication来管理底层资源没有它就直接崩溃。解决确保QApplication app(argc, argv);是main函数里第一个被创建的 Qt 对象并且它一直存活到程序结束。4.4 坑四中文显示成乱码现象界面上本该显示中文的地方变成了一堆问号或方块。原因源代码文件的编码和 Qt 运行时的编码不一致。早期 Qt 4 默认用 Latin-1 处理字符串Qt 5 默认用 UTF-8但如果你在 Windows 上用某些编辑器保存成了 GBK就会乱码。解决把源代码文件统一保存为 UTF-8 编码。在 Qt Creator 里可以在“工具 → 选项 → 文本编辑器 → 行为”中设置默认编码为 UTF-8。如果仍然乱码可以在main函数开头加一行QTextCodec::setCodecForLocale(QTextCodec::codecForName(UTF-8));但更推荐从源头统一编码。4.5 坑五跟着教程写代码但教程用的是 Qt 4我装的是 Qt 5现象教程里的某些头文件路径、类名、函数签名在 Qt 5 里变了编译不过。原因Qt 5 相比 Qt 4 做了一些模块拆分和 API 调整比如QApplication的头文件位置变了某些旧类被标记为废弃。解决这份 94 章教程本身已经兼顾了 Qt 4 和 Qt 5遇到不一致的地方优先看章节里关于 Qt 5 的说明。如果教程没提就去查 Qt 5 的官方文档看对应的类在 Qt 5 里推荐用哪个替代。新手不要死磕旧写法直接学新写法。5. 接下来学什么一条不绕弯的入门路线5.1 前 30 章怎么读最省力这份教程的章节顺序本身就是一条学习路径。我建议你按下面的节奏走阶段章节范围重点内容建议用时环境与第一个程序第 1–3 章安装 Qt Creator跑通 Hello World1 天信号槽与窗口基础第 4–15 章信号槽、自定义信号槽、MainWindow、对话框5–7 天事件与绘图第 16–30 章事件处理、画笔、坐标系统、Graphics View7–10 天文件、模型视图、数据库第 35–58 章文件读写、QListWidget、QSqlTableModel10–14 天网络、线程、QML第 65–94 章网络访问、多线程、QML 基础14–20 天不要试图一天啃完十章。每学完一个概念就自己动手改一改代码。比如学完信号槽就试着做一个按钮点击后改变标签文字的小程序。学完布局管理器就把之前的窗口用水平布局和垂直布局重新排一遍。动手改代码比单纯看书有效得多。5.2 一个具体技巧用 Qt 自带的例子学Qt Creator 的欢迎界面里有一个“示例”按钮里面按模块分类了几百个官方示例。这些示例的代码质量很高而且可以直接编译运行。当你学到某一章觉得抽象时去示例里搜关键词比如学到“模型视图”就搜model view找到对应的例子跑一遍再回头看书里的解释理解会快很多。我自己的习惯是每学完一个模块就从示例里找一个最小的项目把它的代码从头到尾读一遍然后尝试删掉一些行看程序会出什么错。这种“破坏性阅读”能让你很快搞清楚哪些代码是核心、哪些只是辅助。5.3 最后的建议别在第一章就想着做完整项目新手最容易犯的错是刚学完信号槽就想做一个记事本或者聊天工具。结果卡在文件读写、界面布局、事件处理各种细节上信心被磨光。正确的做法是把教程里的每个小例子都跑一遍改一遍确保自己真的理解了再往下走。等你把前 30 章过完再回头做一个小项目你会发现之前觉得难的东西已经变得很自然。从那以后我每次带新人都强制他们先跑通第一个窗口再改三行代码再自己写一个按钮关闭程序。这三步走完后面就顺了。希望帮到你。本文还有配套的精品资源点击获取
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。