移植到 Qt 6
从 Qt 5 版本到 Qt 6 有许多变化。在升级到 Qt 6 之前,请确保您的 Qt 5 应用程序已更新到 Qt 5.15。最新的 Qt 5 版本在移植到 Qt 6 时变化最小。但是,Qt 5.15 标记为已弃用或过时的 API 可能已在 Qt 6 中被移除。
以下是如果您将 Qt 5 应用程序移植到 Qt 6 应该检查的事项。
禁用 Qt 5.15 已弃用的 C++ API
Qt 已弃用的 API 的大多数使用将显示为编译器警告。您还可以通过在构建系统中定义 QT_DISABLE_DEPRECATED_UP_TO C++ 宏来将其用作错误。要禁用在 5.15 及更早版本的 Qt 中已弃用的任何 API,请将宏定义为 0x050F00
,这以十六进制数的形式表示 '5.15.0'。
例如,在 qmake 项目文件中,使用以下方式定义宏:
DEFINES += QT_DISABLE_DEPRECATED_UP_TO=0x050F00
add_compile_definitions(QT_DISABLE_DEPRECATED_UP_TO=0x050F00)
检查模块的变更
Qt 6 发布的目标是保持一个精简的框架,这意味着在 Qt 6 中移除了一些 Qt 5 模块。在某些情况下,已弃用模块的 API 可在另一个模块中找到。在未来的 Qt 6 发布中,可能会添加新的或以前的模块。
- Qt 6.0 中已删除的模块
- Qt 6.0 中新增的模块
- Qt 6.1 中新增和恢复的模块
- Qt 6.2 中新增和恢复的模块
- Qt 6 中 Qt 模块的变更 - 每个 Qt 模块变更列表
测试图形回归
QML 应用程序有新的图形后端,您应该测试其回归。OpenGL 在目标平台上不再默认保证,您应该检查您的图形代码是否仍然创建了您想要的效果。
在 Qt 应用程序中仍然可以使用 OpenGL 调用,但 OpenGL API 已移动到 Qt OpenGL 模块。Qt Widgets 应用的图形后端从 Qt 5 保持不变。
- 图形
- Qt Quick 的变更 - 可能影响 Qt 5 应用程序的 Qt Quick 图形变更
高 DPI
Qt 6 在所有平台上支持高 DPI 显示,并将自动根据使用更高级别的 API(例如 Qt Widgets 或 Qt Quick)时计算显示分辨率。应用程序只需要提供高分辨率资产,例如图片和图标。该功能始终启用。
Qt 6 将默认缩放因子取整策略从 Qt::HighDpiScaleFactorRoundingPolicy::Round 更改为 Qt::HighDpiScaleFactorRoundingPolicy::PassThrough,以便更准确地跟踪操作系统 DPI 设置。使用 Qt Widgets 的应用程序可能在非整数缩放因子下遇到图形错误,例如在 Windows 系统中,当设置显示比例为 175% 时。在这种情况下,将取整策略设置为 Round 以恢复 Qt 5 的行为。
有关更多详细信息,请参阅 高 DPI。
使用平台集成 API
Qt 6 在目标平台上的原生 API 集成更好。您可以使用平台集成 API 实现Qt未提供的原生行为。对于 Qt 6,请检查您应用程序的目标平台是否有任何更新。
使用移植工具
有一种基于 Clazy 的工具可用于从 Qt 5 向 Qt 6 移植:使用 Clazy 检查将 C++ 应用程序移植到 Qt 6。
更多信息
- Qt 6 新功能 -Qt 6 小版本中的更改
- Qt 6 构建系统更改 -从源代码构建 Qt 6
- CMake:Qt 5 和 Qt 6 兼容性 -在 CMake 中支持 Qt 5 和 Qt 6
© 2024 The Qt Company Ltd. 本文档的贡献者是各自所有者的版权。本提供的文档是根据自由软件基金会发布的GNU 自由文档许可证版本 1.3 的条款许可的。Qt 和相应标志是 The Qt Company Ltd 在芬兰和其他国家和地区的商标。所有其他商标均为其各自所有者的财产。