Qt5 迁移 Qt6 完整注意事项(模块变化、类改名、接口变更)
2026/6/12 19:22:53 网站建设 项目流程

Qt6 是架构重构版本,移除大量废弃 API、拆分模块、修改类名与接口。本文整理高频变更点,适合商用项目、老项目批量迁移。

建议迁移路径:Qt5.12/5.15 → Qt6.2+ LTS(长期支持版)


一、模块整体变化(最容易编译报错)

1. Widgets 模块独立(必加)

Qt5widgets模块默认隐式加载。Qt6:必须手动显式添加

  • qmake(.pro)

    pro

    QT += widgets
  • CMake

    cmake

    find_package(Qt6 REQUIRED COMPONENTS Core Widgets) target_link_libraries(App PRIVATE Qt6::Widgets)
2. 模块拆分与重命名

表格

功能Qt5 模块Qt6 模块说明
多媒体multimediamultimedia部分子接口调整
串口serialportserialport基本兼容
脚本script彻底移除不再支持
WebKitwebkit移除,改用webengine旧网页控件淘汰
图形动画animation并入 core/widgets无需单独添加
3. 废弃模块(Qt6 彻底删除)
  • Qt Script、Qt WebKit、Qt Quick 1 系列、Qt XML Patterns解决方案:替换为 Qt WebEngine、原生 QML、第三方库。

二、类与头文件变更

1. 容器、字符串相关隐式头文件移除

Qt5 部分类不用手动 include,Qt6 必须显式包含头文件

cpp

运行

// Qt6 必须手动添加 #include <QString> #include <QList> #include <QVector> #include <QMap> #include <QFile>
2.QRegExp正则表达式 彻底废弃

Qt5QRegExp

Qt6:推荐使用QRegularExpression迁移示例

cpp

运行

// Qt5 QRegExp rx("\\d+"); // Qt6 QRegularExpression rx("\\d+");
3.QAction、菜单栏部分接口调整

部分默认构造函数、图标接口参数变化。

4. 图形类:QPaint相关废弃旧式绘制函数

移除低层级、不安全绘制接口,统一使用新绘图路径。


三、枚举、命名空间变化

  1. 大量枚举从全局移入对应类作用域Qt5 写法(报错):

    cpp

    运行

    btn->setCheckable(true); if(btn->checkState() == Checked) // Qt6 报错

    Qt6 正确写法:

    cpp

    运行

    if(btn->checkState() == Qt::Checked)
  2. Qt::WindowFlagsQt::Alignment等严格类型检查,隐式转换收紧。


四、信号槽与函数接口变更

1. 旧风格信号槽SIGNAL/SLOT宏仍可用,但不推荐

Qt6 更强制推荐函数指针写法,编译期类型检查更严格。

2. 重载函数连接写法统一

Qt5/Qt6 统一使用QOverload,Qt6 对重载检查更严格。

cpp

运行

connect(btn, QOverload<bool>::of(&QPushButton::clicked), this, &MainWindow::slot);
3. 移除emit关键字(仍兼容,但不建议使用)

emit本质是空宏,Qt6 不再推荐书写。


五、废弃函数与接口(高频踩坑)

1.QString::ascii()QString::fromAscii()移除

替换:fromLatin1()/toLatin1()

cpp

运行

// Qt5 废弃 QString::fromAscii("test"); // Qt6 QString::fromLatin1("test");

2.QDateTime::currentMSecsSinceEpoch()废弃

替换:QDateTime::currentMSecsSinceEpoch()→ 改用QElapsedTimer/ 新时间 API。

3.旧式文件、IO 相关辅助函数清理。


六、编译与工程配置差异

  1. C++ 版本要求Qt6 默认要求C++17,建议工程全局开启

    pro

    CONFIG += c++17

    cmake

    set(CMAKE_CXX_STANDARD 17)
  2. 编译器要求

    • Windows:MSVC 2019+ / MinGW 新版本
    • Linux:GCC 7+
    • 老旧编译器无法编译 Qt6。
  3. 资源系统Qt6 支持新资源系统qt_add_resources,旧 qrc 完全兼容。


七、QML / Qt Quick 迁移

  1. Qt Quick Controls 1 彻底移除,必须升级为Qt Quick Controls 2
  2. QML 模块版本号升级(如import QtQuick 6.0);
  3. 部分视觉控件属性、样式接口调整。

八、迁移步骤建议(工程级)

  1. 本地 Qt5.15 先修复所有警告,替换废弃接口;
  2. 切换编译套件为 Qt6,逐步解决编译错误;
  3. 优先补全头文件、补充widgets模块;
  4. 替换QRegExpfromAscii等淘汰接口;
  5. 测试信号槽、UI 布局、数据库、网络功能;
  6. 全平台(Windows/Linux)回归测试。

小结

Qt5 → Qt6 核心工作量:补全模块与头文件、替换废弃 API、修正枚举作用域、升级 C++ 标准。纯 Widget 项目迁移成本较低,使用旧 QML、Script、WebKit 的项目需要重点改造。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询