一、前言

升级到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的单独博客文章。

四、新平台

对于 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 变得更好。

Qt6.2发布(含项目代码升级到Qt6吐血经验总结)的更多相关文章

  1. VC6完整项目代码升级到VS2010

    VC6完整项目代码升级到VS2010,有需要请联系我,专业C++开发,邮箱153786575@qq.com

  2. jenkins(8): 实战jenkins+gitlab持续集成发布php项目(代码不需要编译)

    一. jenkins 的配置 1.前提条件安装了GitLab Plugin (源码管理使用),GitLab Hook(gitlab webhook需要) Manage Jenkins--->Ma ...

  3. 基于node的前端项目代码包发布至nexus

    目录 目录... 3 1. 前言... 1 2. 配置... 1 2.1. 配置angular.json文件... 1 2.2. 配置package.json文件... 1 2.3. 复制git地址. ...

  4. 前端项目 node8升级到node16,代码升级汇总

    背景 公司的项目是vue项目,环境是node@8x版本的,最近我创建react hook的项目,发现至少需要node14才支持,打开官网才发现node都已经到16版本了.失策啊,失策.于是直接升级到最 ...

  5. IntelliJ IDEA 乱码解决方案 (项目代码、控制台等)

    IntelliJ IDEA 乱码解决方案 (项目代码.控制台等) 最近IDE从eclipse改成IntelliJ IDEA 了,原因是公司大部分人都在用这个IDE,而且一直推荐用,所以尝尝鲜.换的第一 ...

  6. 借助GitHub托管你的项目代码

    PS:话说自己注册了GitHub都很久了,却没有怎么去弄,现在系统学习一下,也把自己的学习经历总结下来share给大家,希望大家都能把GitHub用起来,把你的项目代码happy地托管起来! 一.基本 ...

  7. 使用Github管理项目代码的版本

    作为开源代码库以及版本控制系统,Github拥有140多万开发者用户.随着越来越多的应用程序转移到了云上,Github已经成为了管理软件开发以及发现已有代码的首选方法. 在Git中并不存在主库这样的概 ...

  8. 转: 借助GitHub托管你的项目代码

    转自:http://www.cnblogs.com/edisonchou/p/5990875.html 备注: 原贴关于github使用说明,非常详细易懂.建议看原帖. 借助GitHub托管你的项目代 ...

  9. 嵌入式 十个最值得阅读学习的C开源项目代码

    开源世界有许多优秀的开源项目,我选取其中十个最优秀的.最轻量级的C语言的项目,希望可以为C语言开发人员提供参考. 十个最值得阅读学习的C开源项目代码 1. Webbench 2. Tinyhttpd ...

  10. Webpack 2 视频教程 017 - Webpack 2 中分离打包项目代码与组件代码

    原文发表于我的技术博客 这是我免费发布的高质量超清「Webpack 2 视频教程」. Webpack 作为目前前端开发必备的框架,Webpack 发布了 2.0 版本,此视频就是基于 2.0 的版本讲 ...

随机推荐

  1. 41.key发生变化,dom还会复用吗

    会复用但是可能会产生没有必要的真实DOM更新  ,会降低渲染效率 :比如使用 index 作为 key 值 :

  2. 08 ELMo模型(双向LSTM模型解决词向量多义问题)

    博客配套视频链接: https://space.bilibili.com/383551518?spm_id_from=333.1007.0.0 b 站直接看 配套 github 链接:https:// ...

  3. day10-变量、常量、作用域及命名规范

    变量 变量是什么?就是可以变化的量! Java是一种强类型语言,每个变量都必须声明其类型. Java变量是程序中最基本的存储单元,其要素包括变量名.变量类型和作用域.   type varName [ ...

  4. OKR 目标和关键成果

    OKR(Objectives and Key Results)是目标与关键成果管理法,是一套明确和跟踪目标及其完成情况的管理工具和方法.1.OKR首先是沟通工具:团队中的每个人都要写OKR,所有这些O ...

  5. Windows 多次制作母盘,备份文件变大的问题

    公司产品基于Win11 23H2镜像版本制作母盘,我们发现随着版本迭代,基于上一版本母盘生成新母盘备份,母盘文件会越来越大. 此处说明下镜像与母盘文件的区别, 1. 镜像是指操作系统的压缩文件,常见格 ...

  6. 机器学习专业词汇:“Lookahead horizon” 可以翻译为“前瞻视距”或“预见范围”

    "Lookahead horizon" 可以翻译为"前瞻视距"或"预见范围". 在不同领域中,它可能具有稍微不同的含义: 在机器学习和人工智 ...

  7. 惊爆!72.1K star 的 Netdata:实时监控与可视化的超炫神器!

    在当今复杂的 IT 环境中,实时监控与可视化对于保障系统的稳定运行和性能优化至关重要. 无论是服务器.应用程序,还是网络设备,及时获取性能数据能够帮助我们快速定位问题.优化资源配置. Netdata, ...

  8. 开源 - Ideal库 - 枚举扩展设计思路及实现难点(三)

    今天想和大家分享关于枚举扩展设计思路和在实现过程中遇到的难点. 01.设计思路 设计思路说起来其实也很简单,就是通过枚举相关信息:枚举值.枚举名.枚举描述.枚举项.枚举类型,进行各种转换,通过一个信息 ...

  9. 内网渗透之不出网上线CobaltStrike技巧

    目录 前言 smb beacon上线 tcp listener转发上线 http代理上线 tcp beacon正向连接上线 题外话 - cs和msf的权限传递 cs派生给msf msf派生给cs 前言 ...

  10. DDD之理解复杂度、尊重复杂度、掌控复杂度

    本文书接上回<懂了这个道理,人月神话不再是神话!>,关注公众号(老肖想当外语大佬)获取信息: 最新文章更新: DDD框架源码(.NET.Java双平台): 加群畅聊,建模分析.技术交流: ...