本页内容

变更内容Qt GUI

Qt 6 的变更,是出于让框架更高效、更易于使用的有意识努力。

我们力求在每个版本中保持所有公共 API 的二进制和源代码兼容性。但为了使 Qt 成为更好的框架,某些更改在所难免。

在本主题中,我们将总结Qt GUI 中的这些变更,并提供相应的处理指南。

内核类

QBitmap 类

不再支持从 `QPixmap ` 隐式构造 `QBitmap `。其构造函数和赋值运算符现已显式化,并被标记为弃用。请改用新的静态工厂函数 `fromPixmap `。

QCursor 类

不再支持从 `QPixmap ` 隐式构造 `QCursor `,其构造函数已改为显式形式。

QKeyCombination 类

QKeyCombination 是一个用于存储键与可选修饰键组合的新类。应将其用作替代方案,以类型安全的方式将Qt::Key 枚举中的值与修饰键进行组合。

我们建议迁移当前使用 operator+() 组合键和修饰符的代码,因为未来的 C++ 标准可能会将不同枚举类型之间的算术运算声明为非法。请使用 operator|(),并将期望接收int 的 API 修改为期望接收QKeyCombination 。

对于那些期望使用 `int ` 进行键组合的现有 API,可以使用 `QKeyCombination::toCombined()` 进行调用。

文本类

QFontDatabase 类

QFontDatabase 类现仅包含静态成员函数。其构造函数已被废弃。例如,应将

const QStringList fontFamilies = QFontDatabase().families();

请改用

const QStringList fontFamilies = QFontDatabase::families();

QFont 类

QFont::Weight 枚举器的数值已进行调整,以符合 OpenType 字重值标准。QFont::setWeight() 方法现在期望接收枚举值,而非整数int ,若代码使用整数调用该设置器,将导致编译失败。若需继续使用旧版整数值,请使用 QFont::setLegacyWeight()。

绘制类

有关xml-ph-0000@deepl.internal及其他与打印相关的类的详细信息,请参阅移植指南 Qt Print Support 以获取有关QPagedPaintDevice 及其他与打印相关的类的详细信息。

实用类

QIntValidator 和 QDoubleValidator

setRange() 方法不再被标记为虚方法。

OpenGL 类

随着 Qt RHI 作为 Qt 渲染基础的引入,大多数以QOpenGL 为前缀的类已被移至 Qt OpenGL 模块中。

更多详细信息请参阅 Qt OpenGL 移植指南。

一个值得注意的例外是QOpenGLContext 类,它仍然位于Qt GUI 中。

此外,QOpenGLWidget 类已移至一个名为Qt OpenGL Widgets 的新模块中。

QOpenGLContext 类

QOpenGLContext::versionFunctions() 函数已被QOpenGLVersionFunctionsFactory::get() 取代。QOpenGLVersionFunctionsFactory 现已成为一个公共类,属于 Qt OpenGL 模块的一部分。

ANGLE

在 Windows 上,Qt 不再包含 ANGLE(一个将 OpenGL ES 转换为 Direct 3D 的第三方转换器)。这意味着Qt::AA_UseOpenGLES 以及环境变量QT_OPENGL=angle 不再起作用。在动态 OpenGL 构建中,如果 OpenGL 本身无法初始化,系统不会自动回退到 ANGLE。 对于直接使用 OpenGL(例如通过QOpenGLWidget )的基于QWindow 或QWidget 的应用程序,这意味着在运行时,标准 OpenGL 是唯一的选择。不过,使用纯软件 OpenGL 实现(例如预编译 Qt 包中附带的 Mesa llvmpipe)的替代方案仍然可用。 对于Qt Quick 和Qt Quick 3D 上的应用程序,Qt 6 除了 OpenGL 之外,还引入了对 Direct 3D 11、Vulkan 和 Metal 的支持。在 Windows 系统上,默认选择是 Direct 3D,因此通过同时支持 OpenGL 以外的其他图形 API,ANGLE 的移除带来的影响得以缓解。

原生剪贴板集成

Qt 5 通过QtMacExtras 中的 `QMacPasteboardMime ` 以及 Windows QPA API 中的 `QWindowsMime `,提供了将平台特定或自定义剪贴板格式集成到 Qt 中的接口。从 Qt 6.6 开始,等效功能由 macOS 上的 `QUtiMimeConverter ` 类和 Windows 上的 `QWindowsMimeConverter ` 类提供。

从 QWindowsMime 移植到QWindowsMimeConverter 实际上无需任何更改,因为它们的虚拟接口完全相同。不过,在 Qt 6 中,不再需要注册QWindowsMimeConverter 的实现;实例化该类型会隐式注册转换器。

将 QMacPasteboardMime 移植到QUtiMimeConverter 需要重命名部分虚函数。请注意,QMacPasteboardMime API 曾使用过时的术语flavor 来表示 macOS 上的原生剪贴板格式,而该平台现在使用Uniform Type Identifiers ,即UTI,Qt 已据此调整了函数和参数名称。

mimeFor 和flavorFor 函数分别被mimeForUti 和utiForMime 的实现所取代。这些函数应返回转换器可将输入格式转换为的 MIME 类型名称或UTI ,因此移植通常只需重命名现有的重写函数即可。QUtiMimeConverter 中的convertToMime 、convertFromMime 和count 函数与其 QMacPasteboardMime 版本完全相同。

canConvert 、converterName 函数已不再需要,因为上述函数的实现已隐含了这些功能,因此可以移除对这些函数的重写。

与QWindowsMimeConverter 类似,注册操作是通过实例化该类型来完成的。

© 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.