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

可以使用QKeyCombination::toCombined() 来调用期望int 作为按键组合的现有 API。

文本类

QFontDatabase 类

QFontDatabase 类现在只有静态成员函数。构造函数已被弃用。例如

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

使用

const QStringList fontFamilies = QFontDatabase::families();

QFont 类

QFont::Weight 枚举器的数值已更改,以便与 OpenType 权重值保持一致。QFont::setWeight() 期望使用的是枚举值而不是int ,使用整数调用设置器的代码将无法编译。要继续使用旧的整数值,请使用 QFont::setLegacyWeight()。

绘制类

有关 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 上,第三方 OpenGL ES 到 Direct 3D 的翻译器 ANGLE 不再包含在 Qt 中。这意味着Qt::AA_UseOpenGLES 和环境变量QT_OPENGL=angle 不再有任何作用。在动态 OpenGL 构建中,如果 OpenGL 本身无法初始化,则不会自动回退到 ANGLE。对于直接使用 OpenGL 的QWindowQWidget 应用程序,例如通过QOpenGLWidget ,这意味着 OpenGL 本身是运行时的唯一选择。不过,使用纯软件 OpenGL 实现(如随预编译 Qt 软件包一起提供的 Mesa llvmpipe)仍是可行的替代方案。对于Qt QuickQt Quick 3D 应用程序,除了 OpenGL 之外,Qt 6 还引入了对 Direct 3D 11、Vulkan 和 Metal 的支持。在 Windows 上,默认选择是 Direct 3D,因此除 OpenGL 外,还支持其他图形 API,从而减少了 ANGLE 的移除。

本地剪贴板集成

Qt 5 提供了将平台特定或自定义剪贴板格式集成到 Qt 中的接口,具体方法是通过QtMacExtras 中的QMacPasteboardMime 以及 Windows QPA API 中的QWindowsMime 。自 Qt 6.6 起,macOS 的类QUtiMimeConverter 和 Windows 的类QWindowsMimeConverter 提供了同等功能。

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

将 QMacPasteboardMime 移植到QUtiMimeConverter 需要重新命名一些虚拟函数。请注意,QMacPasteboardMime API 对 macOS 上的本地剪贴板格式使用了过时的术语flavor ,而该平台现在使用Uniform Type Identifiers ,即UTIs,Qt Platform Adaptation 对函数和参数名称进行了调整。

mimeForflavorFor 函数分别被mimeForUtiutiForMime 实现所取代。这些实现应返回转换器可将输入格式转换为的 mime 类型或UTI 的名称,因此移植通常只涉及重命名现有的重载。QUtiMimeConverter 中的convertToMimeconvertFromMimecount 函数与其 QMacPasteboardMime 版本完全相同。

canConvertconverterName 函数已不再需要,它们是在实现上述函数时隐含的,因此可以删除对这些函数的重载。

QWindowsMimeConverter 一样,注册是通过实例化该类型完成的。

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