Qt GUI 变更
Qt 6 是有意为之的努力成果,旨在使框架更加高效和易于使用。
我们试图保持每个发布版本中所有公共 API 的二进制和源代码兼容性。但由于努力使 Qt 成为更好的框架,一些更改是不可避免的。
在本主题中,我们总结了 Qt GUI 的这些变更,并提供了处理它们的指南。
内核类
QBitmap 类
从 QBitmap 到 QPixmap 的隐式构建不再受支持。构造函数和赋值运算符现在已被明确指定并标记为已弃用。请使用新的静态工厂函数 fromPixmap 代替。
QCursor 类
从 QCursor 到 QPixmap 的隐式构建不再受支持,构造函数已被明确指定。
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 的基于 QWindow 或 QWidget 的应用程序,例如通过 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 已将其适应于函数和参数名称。
mimeFor
和 flavorFor
函数分别被 mimeForUti 和 utiForMime 实现。这些实现应返回转换器可将其输入格式转换为的 MIME 类型或 UTI
名称,因此通常只需重命名现有的覆盖即可。在 QUtiMimeConverter 中的 convertToMime
、convertFromMime
和 count
函数与其 QMacPasteboardMime 版本相同。
canConvert
和 converterName
函数不再需要,它们是通过上述函数的实现隐含的,因此可以删除对这些函数的覆盖。
与 QWindowsMimeConverter 一样,注册是通过实例化类型来完成的。
© 2024 费尼克斯有限公司。此处包括的文档贡献的版权属于各自的所有者。此处提供的文档是根据自由软件基金会发布的 GNU 自由文档许可版本 1.3 的条款许可的。Qt 和相关标志是芬兰和/或其他国家和地区的 The Qt 公司的商标。所有其他商标都是各自所有者的财产。