本页内容

迁移至 Qt 6

从上一版本 Qt 5 到 Qt 6,Qt 发生了许多变化。在升级到 Qt 6 之前,请确保您的 Qt 5 应用程序已更新至 Qt 5.15。 在移植到 Qt 6 时,Qt 5 的最新版本所涉及的变更最少。不过,在 Qt 5.15 中被标记为弃用或过时的 API 可能已在 Qt 6 中被移除。

如果您正在将 Qt 5 应用程序移植到 Qt 6,请检查以下事项。

禁用在 Qt 5.15 中已弃用的 C++ API

在 Qt 中使用已弃用的 API 通常会以编译器警告的形式出现。 您还可以通过在构建系统中定义QT_DISABLE_DEPRECATED_UP_TO C++ 宏,将此类用法转换为错误。若要禁用 Qt 5.15 或更早版本中已弃用的任何 API,请将该宏定义为0x050F00 ,其中 是“5.15.0”的十六进制编码。

例如,在 qmake 项目文件中,可通过以下方式定义该宏:

DEFINES += QT_DISABLE_DEPRECATED_UP_TO=0x050F00

在 CMake 中,您可以使用 add_compile_definitions:

add_compile_definitions(QT_DISABLE_DEPRECATED_UP_TO=0x050F00)

查看模块变更

Qt 6 版本的目标之一是保持框架的精简,这意味着 Qt 6 中将移除部分 Qt 5 模块。在某些情况下,已弃用的模块中的 API 可在其他模块中使用。在未来的 Qt 6 版本中,可能会添加新的或之前的模块。

图形回归测试

QML 应用程序采用了新的图形后端,您应针对其进行回归测试。目标平台上不再保证默认使用 OpenGL,您应检查您的图形代码是否仍能生成您期望的效果。

在 Qt 应用程序中仍可使用 OpenGL 调用,但 OpenGL API 已移至 Qt OpenGL 模块中。Qt Widgets 应用程序的图形后端与Qt 5相比保持不变。

高DPI

Qt 6 在所有平台上均支持高 DPI 显示器,并在使用Qt Widgets 或Qt Quick 等更高层级的 API 时会自动考虑显示分辨率。应用程序只需提供高分辨率资源(如图像和图标)即可。该功能始终处于启用状态。

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》。

进一步阅读

QTextStream 的变更

Qt 6 中已移除了 QTextStream::setCodec() 方法。请改用QTextStream::setEncoding()。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.