Qt6.2发布(含项目代码升级到Qt6吐血经验总结)
一、前言
升级到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吐血经验总结)的更多相关文章
- VC6完整项目代码升级到VS2010
VC6完整项目代码升级到VS2010,有需要请联系我,专业C++开发,邮箱153786575@qq.com
- jenkins(8): 实战jenkins+gitlab持续集成发布php项目(代码不需要编译)
一. jenkins 的配置 1.前提条件安装了GitLab Plugin (源码管理使用),GitLab Hook(gitlab webhook需要) Manage Jenkins--->Ma ...
- 基于node的前端项目代码包发布至nexus
目录 目录... 3 1. 前言... 1 2. 配置... 1 2.1. 配置angular.json文件... 1 2.2. 配置package.json文件... 1 2.3. 复制git地址. ...
- 前端项目 node8升级到node16,代码升级汇总
背景 公司的项目是vue项目,环境是node@8x版本的,最近我创建react hook的项目,发现至少需要node14才支持,打开官网才发现node都已经到16版本了.失策啊,失策.于是直接升级到最 ...
- IntelliJ IDEA 乱码解决方案 (项目代码、控制台等)
IntelliJ IDEA 乱码解决方案 (项目代码.控制台等) 最近IDE从eclipse改成IntelliJ IDEA 了,原因是公司大部分人都在用这个IDE,而且一直推荐用,所以尝尝鲜.换的第一 ...
- 借助GitHub托管你的项目代码
PS:话说自己注册了GitHub都很久了,却没有怎么去弄,现在系统学习一下,也把自己的学习经历总结下来share给大家,希望大家都能把GitHub用起来,把你的项目代码happy地托管起来! 一.基本 ...
- 使用Github管理项目代码的版本
作为开源代码库以及版本控制系统,Github拥有140多万开发者用户.随着越来越多的应用程序转移到了云上,Github已经成为了管理软件开发以及发现已有代码的首选方法. 在Git中并不存在主库这样的概 ...
- 转: 借助GitHub托管你的项目代码
转自:http://www.cnblogs.com/edisonchou/p/5990875.html 备注: 原贴关于github使用说明,非常详细易懂.建议看原帖. 借助GitHub托管你的项目代 ...
- 嵌入式 十个最值得阅读学习的C开源项目代码
开源世界有许多优秀的开源项目,我选取其中十个最优秀的.最轻量级的C语言的项目,希望可以为C语言开发人员提供参考. 十个最值得阅读学习的C开源项目代码 1. Webbench 2. Tinyhttpd ...
- Webpack 2 视频教程 017 - Webpack 2 中分离打包项目代码与组件代码
原文发表于我的技术博客 这是我免费发布的高质量超清「Webpack 2 视频教程」. Webpack 作为目前前端开发必备的框架,Webpack 发布了 2.0 版本,此视频就是基于 2.0 的版本讲 ...
随机推荐
- 9.23 csp
今天模拟赛出了四道zroi的题,挺GG的. T1.奇观 因为删除的边比较少,所以从m入手,f[i][j]表示长度为i,终点为j的链的方案数. C 是长度为3的链,F是 1条 长度为3 的链 和 2条 ...
- php运行redis测试
在今天将官方的redis教程看完之后,想自己来一个测试. 按照官方给出的代码: 1 <?php 2 //连接本地的 Redis 服务 3 $redis = new Redis(); 4 $red ...
- ajax下载二进制文件(导出Excel)
var url = 'http://127.0.0.1'; var xhr = new XMLHttpRequest(); xhr.open('GET', url, true); // 也可以使用PO ...
- JS 通过年份获取月,季度,半年度,年度
原文请关注公众号 "酒酒酒酒",关注公众号 回复 "JS 通过年份获取月,季度,半年度,年度" 可获取源代码 功能描述: 实例化一个函数,给函数内传递不同的 ...
- dotnet core微服务框架Jimu介绍
jimu是一个基于.Net6.0 简单易用的微服务框架,参考了很多开源库以及想法,使用了大量的开源库(如 DotNetty, consul.net, Flurl.Http, Json.net, Log ...
- 如何使用git上传代码github仓库
本文对于Windows系统上git的安装及基本使用方法进行简单介绍,并介绍如何使用git将仓库中的项目上传至个人的Github中去. 1.打开git 打开你想上传文件的位置,然后选择git bash ...
- C++泛型一:模板
数据类型给程序设计带来的困扰及解决方案 int maxt(int, int); double maxt(double, double); 若有一种占位符T,能够代替类型,便可以简化代码的冗余编写 T ...
- 你的WAF是否真的安全?雷池社区版的安全能力测试
你的WAF能力如何?雷池社区版的安全能力测试 最近雷池社区版很火,各大技术群都在讨论 什么是雷池? 引用官网文档的一段话: SafeLine,中文名 "雷池",是一款简单好用, 效 ...
- NZOJ 模拟赛7
T1 字符串 小X十分热爱学习.有一天,他刚学完"漂亮的k字符串"的概念:给定长度为n的字符串和整数k,k能整除n,如果该字符串满足以下两个条件: s是一个回文串,即对于任意1≤i ...
- Vue 实现图片下拉选择控件
element-ui 的组件库中没有图片下拉选择组件,基于 el-select 组件做的改动并不能完全满足需求,因此决定重写一个. 从头到尾做下来收获很多,我决定把实现过程中遇到的问题记录一下. 效果 ...