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 更简洁(QMediaPlayerQAudioOutput 可以布置实验:Qt5 播放音频 vs Qt6 播放音频,对比代码量与清晰度。
正则表达式 QRegExp(Qt3 遗产,性能差) 和 QRegularExpression 并存 完全弃用 QRegExp,只保留 QRegularExpression 教学时直接跳过 QRegExp,避免学生学多余知识。
打印与 PDF QPrinterQPrintDialog 功能保留,但 API 调整,改进跨平台支持 在教学中提到“Qt6 更多用现代 API 替代旧接口”。
QML 引擎 V4 引擎,依赖 JavaScriptCore / V8 新 QML 引擎(基于 C++17),性能和内存效率更好 演示 Qt5 与 Qt6 QML 程序启动速度的差异。
3D 支持 Qt3DQt 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 的 QMediaPlayerQCamera API 在 Qt6 已大幅改动。
    • 检查是否需要改用新的 QMediaCaptureSessionQAudioOutput
  • Qt Web

    • Qt WebKit → 已废弃,迁移到 Qt WebEngine
  • Qt Script

    • 已移除 → 改用 QJSEngine 或 QML。
  • Qt XMLPatterns

    • 已移除 → 改用 QXmlStreamReader/Writer 或第三方库。
  • Qt Sensors / Bluetooth / Positioning

    • API 位置调整,需要更新头文件和类名。

三、API 兼容性检查

  • 正则表达式

    • 替换所有 QRegExpQRegularExpression
  • OpenGL

    • 如果使用 QGLWidget / QOpenGLFunctions,检查兼容性。
    • 考虑改用 RHI 或 QQuick3D
  • 打印/文档

    • QPrinterQPrintDialog API 是否需要调整。
  • 事件循环

    • 检查 QEventLoop::exec()、信号槽连接语法,保持现代写法。

四、QML / Qt Quick

  • QML 导入模块版本检查:

    • 替换 import QtQuick.Controls 1.ximport 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 版本)。
  • 完整运行测试,确认功能无异常。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐