一、前言
升级到Qt6吐血经验总结 https://gitee.com/feiyangqingyun/qtkaifajingyan#二升级到qt6
我很高兴地宣布 Qt 6.2 的发布。Qt 6.2 是我们一直在努力的版本,因为我们开始迈向 Qt 的新主要版本。它受益于我们为 Qt 6 所做的所有架构升级,并且基本上包括您在 Qt 5.15 中喜欢的所有附加模块。
Qt 6.2 也是 Qt 6 的第一个版本,Qt 公司将为 Qt 商业客户提供长期支持。
我们在迁移到 Qt 6 时的计划是首先关注 Qt 的核心,然后进行我们认为在未来几年保持 Qt 竞争力所需的架构更改。但这种关注也意味着我们不得不在发布 Qt 6.0时对我们支持的附加组件做出妥协 。因此,尽管 Qt 6.0 比 Qt 5.15 更好、更先进,但它确实缺少 Qt 5.15 提供的一些功能。在 Qt 6.2 中,我们缩小了这一差距,并包含了 Qt 5.15 中的所有常用功能以及为 Qt 6 添加的新功能。
随着 Qt 6.2 的发布,几乎我们所有的用户都应该能够将他们的代码从 Qt 5 迁移到 Qt 6。我们已经使用自己的工具实现了这一点。也就是说,Qt Design Studio 2.2 和即将发布的 Qt Creator 6 beta 都是基于 Qt 6.2 LTS。
除了添加缺失的功能外,Qt 6.2 还专注于提高稳定性、性能和开发人员的生活质量。
在详细了解 6.2 中的新功能之前,让我们回顾一下 Qt 6 中的一些主要变化。
二、Qt 6 的架构变化
我们在 Qt 6 中进行了一些更广泛的架构更改,我们现在正在构建 Qt 6.2 和任何未来版本。
- 利用 C++17 在处理 Qt 6 时,我们希望建立在现代 C++ 标准之上。C++17 是最新发布的版本,而 Qt 6 现在依赖于 C++17 兼容编译器。这使得我们可以清理和改进我们的代码库,并为我们的用户提供更现代的 API。
- 在处理大型数据集和性能方面改进了我们的低级容器类。
- 下一代 QML 我们已经开始更加努力地更新 QML 语言,使其在未来更安全、更易于使用。Qt 6.0 – 6.2 在这里奠定了基础,但这种持续的努力将在整个 Qt 6 系列中继续进行。
- 将属性绑定引入 C++ 属性绑定是使 QML 如此成功的概念之一。在 Qt 6 中,我们一直在 C++ 中提供该概念 。
- 新的图形架构 Qt 6 在如何处理与底层操作系统 API 的集成方面采用了 全新的架构。得益于新的渲染硬件接口 (RHI),Qt 6 现在默认使用每个系统上可用的最佳图形 API,显着提高了兼容性——尤其是在桌面和移动操作系统(如 Windows 和 macOS 以及 iOS)上。
- Qt Quick 的统一 2D 和 3D Qt Quick 一直是构建动画和流畅的 2D 用户界面的框架。使用 Qt 6,我们也简化了将 3D 内容集成到基于 QML 的应用程序的过程。深度集成使得在任何级别混合 2D 和 3D 内容变得微不足道,同时从系统中获得最大性能。
- CMake 构建系统 在 Qt 6 中,我们将构建系统从 qmake切换到 cmake,这是当今基于 C++ 的应用程序的标准构建系统。虽然在 Qt 6 的整个生命周期内仍支持 qmake,但初步用户报告表明切换到 cmake 后有显着改进。
三、添加模块
开发 Qt 6.2 的主要工作之一是重新添加我们在 Qt 6.0 中遗漏的所有模块和功能。除了极少数例外,Qt 5.15 支持的所有模块现在也支持 Qt 6.2。
在 Qt 6.2 中,我们添加了对以下附加模块的支持(在 Qt 6.1 中已有的模块之上):
- Qt Bluetooth
- Qt Multimedia
- Qt NFC
- Qt Positioning
- Qt Quick Dialogs
- Qt RemoteObjects
- Qt Sensors
- Qt SerialBus
- Qt SerialPort
- Qt WebChannel
- Qt WebEngine
- Qt WebSockets
- Qt WebView
这些模块的 API 主要向后兼容 Qt 5,并且在移植到 Qt 6 时只需要对用户代码进行少量调整。
Qt 6.2 支持的 完整模块列表 可以在我们的文档中找到 。
三、Qt 6.2 中的新功能
除了我们从 Qt 5 带来的许多模块之外,我们 在 6.2 中还有大量的 新特性和功能。我们来看一下。
(一)、Qt 快速 3D
Qt Quick 3D 获得了一些很酷的新功能,现在支持 实例化渲染,允许您使用不同的变换渲染大量相同的对象。我们还添加了一个新的 API,用于向 场景添加 3D 粒子效果。
输入处理已得到改进,我们现在可以为嵌入在 3D 场景中的 2D 项目正确创建 Qt Quick 输入事件。我们还添加了一个新的 API,用于从场景中的任意点进行基于光线的拾取。
(二)、QML工具
Qt 6.2 对 QML 工具进行了较大改进。我们现在有一个公共的 CMake API ,它极大地简化了创建您自己的 QML 模块的过程。
QML linter (qmlint) 是一种工具,用于检查 QML 源代码的最佳实践、潜在的编码和性能问题,并帮助编写更易于维护的 QML。该工具经历了很大的变化,现在可以完全配置,无论是在命令行级别,还是通过配置文件,甚至是 QML 文件本身中的各个块。此外,它现在可以生成 JSON 输出以简化与其他工具或自动化系统的集成。
QML 格式化程序 (qmlformat) 现在使用 QML dom 库,大大改进了生成的输出。
(三)、Qt多媒体
Qt 多媒体在 Qt 6 中发生了一些相当大的变化。它是我们在 Qt 5 的生命周期中不满意的 API 之一。因此,我们退后一步,对 Qt 6 进行了一些更广泛的 API 和架构更改。没有过多考虑向后兼容性的模块。
尽管如此,从 Qt 5 中的 Qt 多媒体移植到 Qt 6 应该相对简单。
Qt 6 中的 Qt 多媒体确实支持一些我们在 Qt 5 中从未设法正确支持的高度要求的功能。示例包括播放的字幕和语言选择支持以及媒体捕获的可配置设置。
内部架构已经过清理,不再像 Qt 5 那样通过公共 API 公开。这将使我们能够更快地修复错误,并使将来添加新功能变得更加容易。您可以在有关 Qt 6 中的 Qt 多媒体的单独博客文章中找到更多详细信息。
然而,由于这些巨大的变化,该模块仍然存在粗糙的边缘,并且可能在实现中存在相当多的错误。但是,我们相信多媒体是一项必不可少的功能,我们将在 Qt 6.2 中完全支持该模块。
因此,我们将在补丁级别版本的常规提交策略上有所偏离,如果需要修复较大的问题,可能会添加一些较小的 API。
此外,我们将努力在即将发布的补丁级别版本中尽快修复任何报告的错误。
(四)、整个过程中的小改进
几乎所有其他模块都看到了许多较小的 API 添加和改进。
我们已经移植了许多 API 以利用新的属性系统,以便您可以使用 C++ 中的属性绑定。这项工作尚未完成,我们将在未来的版本中继续。
我们还在各个地方修复了许多 API 缺点和缺失的功能。仅举几个例子:
- Qt Charts 获得了一些新的 API,以提高便利性并使事情更加可定制。
- 我们为 QImage 添加了浮点图像格式。
- QByteArray::number() 现在可以正确处理 10 以外的基数的负值。
- QLockFile 现在具有采用 std::chrono 的重载
- Qt Network 支持多个可以在运行时共存的 SSL 后端。
(五)、Qt Creator 和 Qt Design Studio
Qt Creator 和 Qt Design Studio 也做了大量工作,以确保它们为 Qt 6.2 提供一流的支持。Qt Creator 5 包含您为 Qt 6.2 开发所需的一切。
我们今天还发布了全新版本的 Qt Design Studio。Qt Design Studio 2.2 基于 Qt 6.2,极大地支持在一个图形工具中创建基于 Qt Quick 和 Qt Quick 的 3D 用户界面。您可以轻松地在目标硬件上测试这些,无论是台式机、移动设备还是嵌入式设备。有关 更多详细信息,请查看有关Qt Design Studio 2.2的单独博客文章。
四、新平台
QQ截图20211008144845.jpg对于 Qt 6.2,我们做了很多工作来改进我们对当前支持平台的支持,包括桌面和移动端,例如,通过改进我们对 HighDPI 渲染的支持和在 iOS 上添加 NFC 后端。
最重要的是,Qt 6.2 大大扩展了支持平台的范围:
Qt 6.2 完全支持 Apple Silicon 上的 macOS。Qt 现在可以轻松创建通用二进制文件并在 Intel 和 Apple Silicon 上为 macOS 进行开发。当然,该版本也在我们的 CI 系统中进行了全面测试。一直可以通过 Rosetta 层在 Apple 芯片上运行 Qt 应用程序,但 Qt 6.2 现在提供了在 Apple 芯片上本地运行的完整支持。
Qt 6.2 还恢复了对 INTEGRITY 和 QNX 实时操作系统的支持。支持需要 C++17 工具链和最新版本的操作系统。QNX 的最低要求是 7.1 版,在 INTEGRITY 上,我们支持 19.0.13 版。
针对 Qt 6.2 的 webOS 验证也已完成,以进一步加强 Qt 对 webOS 的承诺。
有很多工作正在进行以支持 Windows 11,我们希望能够在 6.2 补丁级别版本中为其提供全面支持。Windows on ARM HW 也可作为 Qt 6.2 的技术预览版提供。
最后,我们做了进一步的工作来改进我们对 WebAssembly 的支持,它在 Qt 6.2 中作为技术预览提供支持。
Qt for Python 今天也发布了,大家可以试一试。未来几天将发布一篇单独的博客文章,重点介绍最新 Qt 6.2 更改中采用的所有功能。敬请关注!
五、从 Qt 5 移植
在开发 Qt 6 时,与 Qt 5 的源代码兼容性一直是我们工作的关键部分。有一些地方我们不得不在某种程度上打破这种兼容性,以进行一些必需的架构更改或为我们带来一些巨大的性能优势。
在大多数情况下,从 Qt 5 移植到 Qt 6 应该很简单。在Qt的6移植指南 列出了所需要的步骤,并具有更多的信息。您还可以从我们的合作伙伴之一或我们的顾问那里获得移植帮助。
移植到 Qt 6 的典型步骤是:
- 检查您是否使用了受支持的编译器和平台版本
- 首先在 Qt 6 模式下使用 Qt 5.15 编译(使用 QT_DISABLE_DEPRECATED_BEFORE 宏)
- 然后用 Qt 6.x 编译 - 如果需要,在移植阶段利用兼容性模块
有了这些,您就可以在 Qt 6 上运行应用程序,并可以开始使用它提供的所有新特性和功能。例如,如果您的应用程序使用 QML,请运行 qmlint 工具并修复它给出的警告。
六、现在试试
在为您提供下载 Qt 6.2 的链接之前,我想向您指出 Qt 6.2的发行说明。发行说明还包含有关自 Qt 6.1 以来我们所做更改的许多详细信息,包括已修复错误的完整列表。
它们还包含为 Qt 6.2 贡献补丁的所有人的完整列表。列表太长,无法在此处重现,但我要感谢大家帮助和实现 Qt 6.2。
如果您已经安装了 Qt,那么获得 Qt 6.2 的最简单方法是通过在线安装程序。如果没有,您可以从您的Qt 帐户 或通过我们的网页下载。
我希望你会喜欢 Qt 6.2。让我们知道事情的进展并报告您可能发现的任何错误,以便在即将发布的补丁版本中使 Qt 6.2 变得更好。
网友评论