Qt 6.2 长周期版正式发布
发布时间:2022-03-31

本文翻译自Qt 6.2 LTS Released

原文作者:Qt 公司首席技术官及Qt开源项目首席维护者Lars Knoll

校审:Sam Wong


我很高兴地宣布 Qt 6.2 的正式发布。它是自我们开始迈向全新Qt主要版本以来,一直在努力的版本。Qt 6.2得益于我们为Qt 6所做的所有架构升级,并包含了Qt 5.15中几乎所有深受喜爱的附加模块。



Qt 6.2 也是 Qt 公司为商业版客户提供的Qt 6系列中第一个长周期支持版。


在我们升级 到Qt 6的计划中,我们首先关注 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用户都应能将其代码从 Qt 5 迁移到 Qt 6。我们已将自己的工具实现了迁移。也就是说,Qt Design Studio 2.2 和即将发布的 Qt Creator 6 beta 版都基于 Qt 6.2 长周期支持版。


除了增加缺失的功能外,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 应该很简单。您将在本文中读到更多相关信息。


现在让我们仔细看看 Qt 6.2 中的新功能。


添加的模块


开发 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 支持的完整模块列表(https://doc.qt.io/qt-6/qtmodules.html)可以在我们的在线文档中找到。


Qt 6.2 中的新功能


除了从 Qt 5 带来的许多模块,我们还在 6.2 中引入大量的新特性(https://wiki.qt.io/New_Features_in_Qt_6.2)和功能。我们来看一下。


Qt Quick 3D


Qt Quick 3D得到了一些很酷的新功能,现在支持实例化渲染,允许您用不同变换渲染大量相同的对象。我们还添加了一个用于向场景添加 3D 微粒效果的 API。


输入处理已得到改进,我们现在可以为嵌入在 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 Multimedia


Qt Multimedia 在 Qt 6 中经历了巨大变化。它是我们在 Qt 5 生命周期中不满意的 API 之一。因此,我们退后一步,对模块做了一些更广泛的API和架构更改,而没太考虑向后兼容性。


尽管如此,从Qt 5 中的 Qt Multimedia移植到 Qt 6 应该相对简单。


Qt 6 中的 Qt Multimedia确实支持一些我们从未在Qt 5中正确支持且被多次要求增加的功能,包括支持字幕、回放时的语言选择以及可配置的媒体捕获设置。


内部架构已经过清理,不再像 Qt 5那样通过公共 API 公开。这使我们能够更快地修复bug,并且使添加新功能变得更加容易。


然而,由于这些巨大的变化,该模块在实现中可能存在相当多的bugs。但是,我们相信多媒体是必不可少的一项功能,将在 Qt 6.2 中完全支持该模块。


因此,我们将在补丁级版本的常规提交策略上有所偏离,如果需要修复较大的问题,可能会添加一些较小的 API。


此外,在即将发布的补丁级版本中,我们将尽快努力修复任何报告的错误。


较小的一些改进


几乎所有其他模块都有许多较小的 API 添加和改进。


我们移植了许多 API来利用新的属性系统,以便您使用 C++中的属性绑定。这项工作尚未完成,我们将在未来的版本中继续。


我们还修复了许多 API 缺点和不同地方缺失的功能。仅举几个例子:


•    Qt Charts 增加了提高便利性并方便定制的新API。
•    为 QImage 添加了浮点图像格式。
•    QByteArray::number() 现在可以正确处理不等于 10基数的负值。
•    QLockFile 现在具有采用 std::chrono 的重载
•    Qt Network 支持多个可以在运行时共存的 SSL 后端。


详细信息,请查看我们 wiki 中的新功能页面(https://wiki.qt.io/New_Features_in_Qt_6.2)。


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 的博文(https://www.qt.io/blog/qt-design-studio-2.2-released)。


全新平台


我们在Qt 6.2上做了很多工作来改进对当前支持平台的支持,包括台式机和移动端,例如,改进我们对 HighDPI 渲染的支持和在 iOS 上添加 NFC 后端。



除此以外,Qt 6.2 大幅扩展了支持平台的范围:


Qt 6.2 完全支持 Apple Silicon 上的 macOS。Qt 现在可以轻松创建通用二进制文件,并在 Intel 和 Apple Silicon 上为 macOS 进行开发。当然,该版本也在我们的 CI 系统中进行了全面测试。Qt 应用程序一贯能在Apple芯片的 Rosetta 层上运行,但 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补丁级版本中为其提供全面支持。Qt 6.2还提供了对ARM硬件上的Windows的技术预览版支持。


最后,我们改进了对WebAssembly 的支持,在 Qt 6.2 中以技术预览版发布。


从 Qt 5 移植


在开发 Qt 6 时,与 Qt 5 的源代码兼容性一直是我们工作的关键部分。有时我们不得不在某种程度上打破这种兼容性,以进行必要的架构更改,或为我们带来巨大的性能优势。


在大多数情况下,从 Qt 5 移植到 Qt 6 应该很简单。Qt 6 移植指南(https://doc.qt.io/qt-6/portingguide.html)列举了所需的步骤,并提供了更多信息。您还可以从我们的合作伙伴或我们的顾问(https://www.qt.io/zh-cn/qt-consulting)获得移植帮助。


移植到 Qt 6 的典型步骤是:


•    检查您是否使用了受支持的编译器和平台版本
•    首先在 Qt 6 模式下使用 Qt 5.15 编译(使用 QT_DISABLE_DEPRECATED_BEFORE 宏)
•    然后用 Qt 6.x 编译 —— 如果需要,在移植阶段利用兼容性模块


有了这些,您就可以在 Qt 6 上运行应用程序,并可以开始使用它提供的所有新特性和功能。例如,如果您的应用程序使用 QML,请运行 qmlint 工具,并修复它给出的警告。



这里,我还想介绍一本有关 QML 和 Qt 6 的电子书(https://www.qt.io/product/qt6/qml-book)。这是QML入门或了解更多信息的绝佳资源。我们要感谢主要作者, Johan Thelin、Jürgen Ryanell 和 Cyril Lorquet,以及参与其中的社区成员。该项目由 Qt 公司赞助,这是一个持续更新的动态文档。欢迎大家给与项目好评和反馈。


今天就试试吧


在向您提供下载 Qt 6.2链接前,我想向您推荐阅读Qt 6.2 的发行说明(https://code.qt.io/cgit/qt/qtreleasenotes.git/about/qt/6.2.0/release-note.md),其中包含众多自 Qt 6.1发布以来我们所做的更改详细信息,包括已修复bugs的完整列表。


它还包含了所有为 Qt 6.2 贡献补丁的人的完整列表。列表太长,无法在此处重现,但我要感谢所有帮助和实现 Qt 6.2的人们。


如果您已安装了 Qt,那么获得 Qt 6.2 的最简单方法是通过在线安装程序。如果没有,您可以从您的 Qt 帐户或通过我们的网页下载。


希望您喜欢 Qt 6.2。让我们知道使用它的进展,并报告您可能发现的任何bug,以便在即将发布的补丁版本中使 Qt 6.2 变得更好。


请继续关注Qt 6


最后但同样重要的是,这里有一个关于在不久的将来还有哪些的快速更新。一个跟踪并了解正在发生的事情的好地方是Qt 6独立页面。


Qt World Summit 2021将近,我想邀请您的加入。您将从我们团队、我们的客户和 Qt 生态系统成员那里面对面交流,从Qt 的最新发展中获得灵感。您可以在https://www.qt.io/zh-cn/qtws21_china报名中国站活动


谢谢大家, Qt 公司希望您会喜欢Qt 6.2长周期支持版!


(文章来源公众号:QT软件)