Qt5 → Qt6 教学差异对照表
| 方面 | Qt5 | Qt6 | 教学提示 |
|---|---|---|---|
| C++ 标准 | C++11/14 为主 | C++17 起步,部分示例用到 C++20 | 在课程开头提醒学生,Qt6 项目需要更高版本编译器(GCC 8+/MSVC 2019+/Clang 10+)。 |
| 模块结构 | 模块数量多,部分历史包袱 | 模块精简与重组,部分拆分/合并/弃用 | 讲授模块时重点强调 Qt Multimedia / Qt Network / Qt WebEngine 等的变化。 |
| 图形渲染 | Qt Quick / QPainter 基于 OpenGL 默认后端 | 新的 RHI (Rendering Hardware Interface),支持 Vulkan、Metal、Direct3D、OpenGL | 给学生演示同一 QML 应用在 Windows/Linux/macOS 下的渲染差异,理解跨平台意义。 |
| 多媒体 | Qt Multimedia 功能较杂,API 较老 | 彻底重写,API 更简洁(QMediaPlayer、QAudioOutput) | 可以布置实验:Qt5 播放音频 vs Qt6 播放音频,对比代码量与清晰度。 |
| 正则表达式 | QRegExp(Qt3 遗产,性能差) 和 QRegularExpression 并存 | 完全弃用 QRegExp,只保留 QRegularExpression | 教学时直接跳过 QRegExp,避免学生学多余知识。 |
| 打印与 PDF | QPrinter、QPrintDialog | 功能保留,但 API 调整,改进跨平台支持 | 在教学中提到“Qt6 更多用现代 API 替代旧接口”。 |
| QML 引擎 | V4 引擎,依赖 JavaScriptCore / V8 | 新 QML 引擎(基于 C++17),性能和内存效率更好 | 演示 Qt5 与 Qt6 QML 程序启动速度的差异。 |
| 3D 支持 | Qt3D、Qt Quick 3D (Tech Preview) | Qt Quick 3D 成熟,可直接在 QML 中写 3D 场景 | 建议课程中加入一个 “Qt Quick 3D 小案例”,展示与 Qt5 差异。 |
| 国际化 | tr(), lupdate, linguist | 保持一致,工具链更稳定 | 学生迁移基本无障碍。 |
| 构建系统 | qmake 为主(CMake 可选) | 全面转向 CMake,qmake 已进入维护模式 | 课程重点:教学生用 CMake + Qt6,同时提到 qmake 以便理解旧项目。 |
| 许可证 | LGPL 2.1/3.0,GPL,商业版 | 保持相同,但新特性主要集中在 Qt6 | 对学生影响不大,提及即可。 |
Qt5 → Qt6 迁移检查清单 ✅
一、环境准备
-
编译器升级到 C++17(GCC ≥ 8, MSVC ≥ 2019, Clang ≥ 10)。
-
Qt6 安装完成(推荐 6.5 LTS 或 6.7 以上版本)。
-
项目构建工具迁移:
- 如果原来用 qmake → 改写为 CMakeLists.txt。
- 使用
find_package(Qt6 ...)和target_link_libraries(... Qt6::Widgets)。
二、模块检查
-
Qt Multimedia
- Qt5 的
QMediaPlayer、QCameraAPI 在 Qt6 已大幅改动。 - 检查是否需要改用新的
QMediaCaptureSession、QAudioOutput。
- Qt5 的
-
Qt Web
- Qt WebKit → 已废弃,迁移到 Qt WebEngine。
-
Qt Script
- 已移除 → 改用 QJSEngine 或 QML。
-
Qt XMLPatterns
- 已移除 → 改用 QXmlStreamReader/Writer 或第三方库。
-
Qt Sensors / Bluetooth / Positioning
- API 位置调整,需要更新头文件和类名。
三、API 兼容性检查
-
正则表达式:
- 替换所有
QRegExp→QRegularExpression。
- 替换所有
-
OpenGL:
- 如果使用
QGLWidget/QOpenGLFunctions,检查兼容性。 - 考虑改用 RHI 或
QQuick3D。
- 如果使用
-
打印/文档:
-
QPrinter、QPrintDialogAPI 是否需要调整。
-
-
事件循环:
- 检查
QEventLoop::exec()、信号槽连接语法,保持现代写法。
- 检查
四、QML / Qt Quick
-
QML 导入模块版本检查:
- 替换
import QtQuick.Controls 1.x→import QtQuick.Controls 2.x。
- 替换
-
QtQuick Controls 1 已移除,UI 需要用 QtQuick Controls 2 重写。
-
检查是否依赖已废弃的 QML 类型(如
QtWebView 1.x)。 -
测试 QML 性能和内存消耗,确认新引擎兼容。
五、第三方依赖
-
检查所有依赖的第三方 Qt 库,是否有 Qt6 版本。
-
如果库停留在 Qt5:
- 考虑自己迁移源码。
- 或寻找替代方案。
六、构建与发布
- 全量重新编译项目(Qt6 与 Qt5 二进制不兼容)。
- 检查打包工具链(
windeployqt/macdeployqt/linuxdeployqt是否已更新到 Qt6 版本)。 - 完整运行测试,确认功能无异常。
991

被折叠的 条评论
为什么被折叠?



