Qt GUI 变更

Qt 6 是有意为之的努力成果,旨在使框架更加高效和易于使用。

我们试图保持每个发布版本中所有公共 API 的二进制和源代码兼容性。但由于努力使 Qt 成为更好的框架,一些更改是不可避免的。

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

内核类

QBitmap 类

QBitmapQPixmap 的隐式构建不再受支持。构造函数和赋值运算符现在已被明确指定并标记为已弃用。请使用新的静态工厂函数 fromPixmap 代替。

QCursor 类

QCursorQPixmap 的隐式构建不再受支持,构造函数已被明确指定。

QKeyCombination 类

QKeyCombination 是一个储存键与可选修饰符组合的新类。它应以类型安全的方式替换使用 Qt::Key 枚举值与修饰符组合时的值。

我们建议迁移目前使用 operator+() 运算符来组合键和修饰符的代码,因为未来 C++ 标准可能会宣布在无关枚举类型之间进行算术运算为非法操作。请使用 operator|(),并将期望接收 int 的 API 改为期望接收 QKeyCombination

现有 API,期望接收键组合的 int,可以使用 QKeyCombination::toCombined() 来调用。

文本类

QFontDatabase 类

现在 QFontDatabase 类仅具有静态成员函数。构造函数已被弃用。例如,而不是:

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

使用以下方法

const QStringList fontFamilies = QFontDatabase::families();

QFont 类

QFont::Weight 枚举器的数值已被更改为与 OpenType 重量值相一致。 QFont::setWeight() 期望接收枚举值而不是 int,调用设置整数值的 setter 的代码将无法编译。要继续使用旧的整数值,请使用 QFont::setLegacyWeight()。

绘画类

有关 Qt 打印支持 的转换指南,请参阅 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 上,ANGLE(一个第三方 OpenGL ES 到 Direct 3D 转换器)不再包含在 Qt 中。这意味着 Qt::AA_UseOpenGLES 和环境变量 QT_OPENGL=angle 不再有任何作用。在 动态 OpenGL 构建 中,如果没有成功初始化 OpenGL,则不会自动回退到 ANGLE。对于直接使用 OpenGL 的基于 QWindowQWidget 的应用程序,例如通过 QOpenGLWidget,这意味着在运行时只有 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 开始,由类 QUtiMimeConverter(针对 macOS)和 QWindowsMimeConverter(针对 Windows)提供等效功能。

从 QWindowsMime 迁移到 QWindowsMimeConverter 几乎不需要更改,因为虚拟接口相同。然而,在 Qt 6 中,不再需要注册 QWindowsMimeConverter 实现;隐式实例化该类型将注册转换器。

将 QMacPasteboardMime 迁移到 QUtiMimeConverter 需要重命名一些虚拟函数。请注意,QMacPasteboardMime API 使用了过时的术语 flavor 来表示 macOS 上的原生剪贴板格式,而平台现在使用的是 统一类型标识符,即 UTI,Qt 已将其适应于函数和参数名称。

mimeForflavorFor 函数分别被 mimeForUtiutiForMime 实现。这些实现应返回转换器可将其输入格式转换为的 MIME 类型或 UTI 名称,因此通常只需重命名现有的覆盖即可。在 QUtiMimeConverter 中的 convertToMimeconvertFromMimecount 函数与其 QMacPasteboardMime 版本相同。

canConvertconverterName 函数不再需要,它们是通过上述函数的实现隐含的,因此可以删除对这些函数的覆盖。

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

© 2024 费尼克斯有限公司。此处包括的文档贡献的版权属于各自的所有者。此处提供的文档是根据自由软件基金会发布的 GNU 自由文档许可版本 1.3 的条款许可的。Qt 和相关标志是芬兰和/或其他国家和地区的 The Qt 公司的商标。所有其他商标都是各自所有者的财产。