Qt 6.7 正式发布!

本文翻译自:Qt 6.7 Released!

原文作者:Qt Group研发总监Volker Hilsheimer

在最新发布的Qt 6.7版本中,我们大大小小作出了许多改善,以便您在构建现代应用程序和用户体验时能够享受更多乐趣。

部分新增功能已推出了技术预览版,欢迎与我们分享您的使用反馈,帮助我们为接下来的LTS版本做好准备!

在Qt中使用C++20

对于大部分编译工具链而言,C++20仍是可选的实验性标准。并且,在构建或使用Qt的过程中,C++20也不是必须的。尽管如此,我们还是希望为用户提供最新的版本,以便他们能够根据自己的喜好进行选择。从C++17过渡到C++20,现有的代码需要经过调整才可运行,Qt也是如此。因此,我们对Qt 6.7进行了进一步调整,以便Qt能够更加适配于现代C++堆栈。

在C++20语言中,三向比较运算符operator<=>(),也就是所谓的“宇宙飞船”运算符是一项比较有用的补充。在实现该运算符时,您需要指定相应的序关系。在Qt 6.7中,我们添加了Qt::{strong,weak,partial}_ordering类作为对应std::*_ordering类型的C++17兼容实现。对于类型作者,Qt 6.7提供了可用于实现关系运算符的辅助宏。这些宏在C++20版本中可以扩展为operator<=>(),在C++17版本中则会退回到其所使用的六个运算符。

C++20标准库的一项有用补充是std::span,我们希望自己在使用的同时,也能够提供给Qt用户。作为连续序列对象的非所有者表示,span在构建和通过函数调用传递时成本较低,而我们此次推出的QSpan便是这种类型的C++17实现。

我们还将继续为相关的Qt API提供std::chrono支持。Qt Network API的传输超时现在可以指定为std::chrono类型和字面量形式。

支持2D和3D可视化的Qt Graphs

在Qt 6.6中,我们引入了Qt Graphs的首个技术预览版作为现代Qt 6框架,以便在硬件加速的渲染架构上实现数据的可视化。

在Qt 6.7中,除了自Qt 6.6起就提供的3D可视化之外,我们还添加了对2D条形图、折线图和散点图的支持。该模块可与Qt Quick中的动画和特效集成,并可提供主题和基于处理程序的交互式API。

Qt Graphs仍在积极开发中,因此在此版本中将继续作为技术预览版提供。我们对数据API和框架进行了部分实质性的改进,以减少内存分配量,并使其与Qt的抽象项模型继续保持一致。我们希望在Qt 6.8 LTS技术预览版发布前,进一步改进API和框架,因此欢迎与我们分享您的用例和需求,以便我们能够以最佳方式满足。

连接性、协议和分布式架构

通过引入QHttpHeaders、QRestAccessManager和QRestReply作为REST特定用例的新类,分布式系统的开发人员现在可以更高效地使用HTTP和REST API

Qt gRPC引入了用于客户端、服务器和双向流调用的新类,可以在值变化时自动触发消息的无缝传递。新的Interceptor API可为选定的gPRC消息添加回调函数,从而能够实现缓存或日志记录等功能。借助Qt 6.7中的Qt Protobuf,开发人员现在可以将Protobuf消息序列化或反序列化为JSON格式,并可使用支持可选字段和保留枚举值大小写的生成器。

这些新功能将帮助开发人员更轻松地使用Qt来构建稳健且可扩展的应用程序。在Qt gQPC和Qt Protobuf实现对HTTP/2的支持后,它们将在Qt 6.8版本中脱离技术预览阶段。

矢量图形

Qt SVG自推出以来就一直支持SVG 1.2 Tiny配置文件的静态特性。如今该配置文件已越来越不重要,并且长时间以来,创作工具已不再遵循任何特定的配置文件。在Qt 6.7中,我们分析了SVG1.1和2.0中常用于SVG资源的静态元素,并添加了对这些常用功能的支持,包括<symbol>、<marker>、<pattern>、<mask>及各种<filter>元素。借助6.7中的Qt SVG,应用程序现在可以渲染大多数与UI构建器相关的SVG文件

如果需要完全支持SVG 2.0,Qt WebEngine模块仍然是最佳选择。

除了将SVG作为预渲染像素图导入Qt UI,我们还在努力实现将矢量图形资源直接导入Qt Quick的场景图。新的(实验性的)svgtoqml工具可将SVG转换为QML,并且经过改进的Qt Quick Shapes模块可以实现更高质量的渲染。在Qt 6.6中以技术预览版本引入的曲线渲染器现已得到完全支持,并可通过PreferredRendererType属性进行启用。

字体和图标的改进

在Qt 6.6中引入对印刷字体功能的支持后,我们在Qt 6.7中又引入了对变量字体的支持。变量字体通过将单个字体的变体整合到单个字体文件,从而应用程序可以从中选择不同的“粗细”或“斜体”值。由于字体设计者所创建的可变轴不同,字形可以呈现动画形式或体现不同的层。如果需要了解更多有关变量字体支持及其他文本改进的信息,请参阅Eskil的博客文章

该API现在很稳定,并且始终使用新的QFont::Tag类以类型安全的方式指定字体功能和轴名称。

由于对现代字体的支持得到了改进,我们添加了对本机图标库的支持,这些库通常通过字体提供。例如,on::fromTheme的实现可以将XDG图标名称映射到Apple、Windows和Android平台中本机图标库的相应符号上。未来,我们还计划利用字体API的新功能为更多的图标功能提供支持,例如图标的轮廓及填充版本等。

混合应用本机UI元素和渲染

在桌面和移动端上,应用程序通常需要组合来自不同技术和框架的UI元素。由于Qt与所有平台的原生技术都是紧密集成的,因此可以创建窗口等基本的UI元素,并且在Qt Widgets应用程序中使用其他框架的UI元素则早就已经实现。

在Qt 6.7中,我们还添加了对在Qt Qucik场景中嵌入本机窗口的支持。从而使AppKit的MapView和Windows媒体播放器等本机控件能够在Qt Quick UI中得到正确定位和堆叠。并且,Qt Quidk UI元素还可通过分层窗口叠加在本机组件之上。

此外,应用程序现在还可以通过QRhiQuickItem和QRhiWidget类,借助Qt支持的任意图形API将渲染代码分别添加到Qt Quick和Qt Widgets应用程序中。尽管此类代码通常不能完全跨平台使用(因为Vulkan、OpenGL、Direct3D和Metal在所有目标平台上并没有受到同等支持),但您可以集成使用了这些技术的第三方框架,或为特定平台编写高度优化的渲染代码来解决这个问题。

平台支持更新

与其他次要版本一样,我们更新了支持的平台列表,并添加了相关操作系统的最新稳定版本。在桌面和移动设备方面,Qt 6.7完全支持macOS 14和iOS 17、Windows 11 23H2以及Android 14。最新支持的Linux发行版包括RedHat 9.2、Open Suse 5.15和SUSE Linux Enterprise Server 15(Ubuntu仍为22.04)。安装程序中提供了使用基于LLVM的MinGW工具链的Windows预构建二进制文件,并且Windows和Linux on ARM均作为技术预览版提供。

在嵌入式方面,Boot2Qt参考映像支持Yocto 4.3 Nanbield。作为实时操作系统,Qt 6.7现在还提供VxWorks 7的纯源技术预览(使用iMX6硬件SR 24.03版本)。此外,在线安装程序还可提供QNX 7.1的预构建二进制文件。

经过改进的新示例和演示

除了对框架的改进,我们还整理了Qt附带的示例和演示应用程序,并更新了UI和编码风格。我们还创建了部分新的应用程序,向您展示经过设计人员和开发人员的通力合作,可以将Qt的UI、可视化和后端功能进行结合。

Lightning Viewer示例使用Qt Location和Qt Quick Controls来可视化通过Qt WebSocket接收的模拟闪电数据。其中所有的控件样式都是使用Figma创建的。

完全重新创建的StocQt示例使用Qt Graphs来可视化基于NASDAQ-100的股票数据。该示例的UI是使用Qt Design Studio创建的;在设置对话框中提供API密钥后,即可通过Financial Modeling Prep服务接收实时信息数据。

新的OSM Buildings示例结合Qt Quick 3D、Qt Positioning以及Qt Network,实现了通过OpenStreetMap服务接收数据的建筑物地图数据3D查看器。

虚拟助手在用户界面中越来越流行,新的Virtual Assistant示例展示了如何通过时间线动画轻松赋予3D模型生命。

最后,新的Volumetric rendering示例使用Qt Quick 3D新支持的3D纹理实现了体积射线投射

Qt for Python

随着Qt中的新功能不断增加,我们的Python产品也需要做出相应改善以方便Python用户的使用。除了本文所涉及的内容,PySideShiboken也有许多改进之处,这些内容将在后续贴子中详细介绍。敬请关注!

小事情大不同

以上就是此次较为重要的新功能,但与所有次要版本一样,Qt 6.7还对现有的类和工具进行了许多小改进。由于本文篇幅有限,您可以参阅Qt 6.7新增功能文档查阅完整的新增内容。

致谢

感谢所有参与Qt 6.7版本实现的贡献者。您可以在发布说明的末尾看到为Qt源代码提供补丁的完整社区成员名单。同时,也特别感谢所有通过报告错误、发送反馈或和分享用例来帮助改进Qt的人。最后,感谢所有参与此次发布的人!

和往常一样,您可以通过Qt安装程序来获取新版本,也可以通过下载页面Qt账户页面以及上文提及的Debian存储库获取该版本。

部分新增功能已推出了技术预览版,欢迎与我们分享您的使用反馈,帮助我们为接下来的LTS版本做好准备!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/606123.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL系列之MySQL 存储引擎

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; 往期热门专栏回顾 专栏…

【LeetCode】环形链表I 环形链表II

一、环形链表I 题目 思路 该题使用快慢指针 slow、 fast slow 走一步 &#xff0c;fast 走两步 当fast 走到空 或者 fast的下一个结点为空&#xff0c; 则无环 fast若追上slow &#xff0c; 则有环 结论证明 该思路默认了 &#xff1a; 若存在环形链表 &#xff0c; 无论…

文件夹批量重命名:文件夹名称编号实战,快速实现文件分类与整理

随着电脑中存储的文件日益增多&#xff0c;如何有效地管理和组织这些文件成为了许多用户面临的一大挑战。文件夹批量重命名是一种非常实用的技巧&#xff0c;它可以帮助我们快速实现文件的分类与整理&#xff0c;使文件存储更加有序、高效。 为什么需要文件夹批量重命名&#x…

IP SSL证书申请教程:实现HTTPS加密访问

随着网络安全意识的提高&#xff0c;HTTPS加密访问已经成为网站安全性的重要标准。通过安装SSL证书&#xff0c;网站可以实现数据的加密传输&#xff0c;有效保护用户隐私和数据安全。本文将详细介绍如何为IP地址申请SSL证书&#xff0c;并实现HTTPS加密访问。 一、准备工作 …

Kaggle入门-泰坦尼克号数据及代码

本文讲述了kaggle入门级别的竞赛&#xff1a;泰坦尼克号&#xff0c;有提及如何下载数据&#xff0c;附带有思路和代码解析 前言 我个人还是喜欢直接在kaggle运行&#xff0c;但是有人不能科学上网呀 数据 在找到泰坦尼克号比赛里&#xff0c;创建一个notebook&#xff0c;然…

Excel Module: Iteration #1 EasyExcel生成下拉列表模版时传入动态参数查询下拉数据

系列文章 EasyExcel生成带下拉列表或多级级联列表的Excel模版自定义校验导入数据(修订) 目录 系列文章前言仓库一、实现1.1 下拉元数据对象1.2 构建下拉元数据的映射关系1.3 框架方式1.3.1 框架实现1.3.2 框架用例模版类加载下拉业务导出接口 1.4 EasyExcel方式1.4.1 EasyExce…

数据仓库与数据挖掘实验练习3-4(实验二2024.5.8)

练习3 1.简单文件操作练习 import pandas as pd # 读取文件 pd.read_csv(pokemon.csv) # 读取 CSV 文件的函数调用&#xff0c;它将文件中的数据加载到 DataFrame 中&#xff0c;并指定了 Pokemon 列作为索引列。 pd.read_csv(pokemon.csv,index_colPokemon)#查看类型 type(p…

UE5材质基础(2)——数学节点篇1

UE5材质基础&#xff08;2&#xff09;——数学节点篇1 目录 UE5材质基础&#xff08;2&#xff09;——数学节点篇1 Add节点 Append节点 Abs节点 Subtract节点 Multiply节点 Divide节点 Clamp节点 Time节点 Lerp节点 Add节点 快捷键&#xff1a;A鼠标左键 值相加…

智慧安监中的物联网主机E6000

物联网主机E6000的研发背景主要源于我国对物联网技术在安全生产、环境监测、火灾预警与防控、人员定位与紧急救援等领域的迫切需求。近年来&#xff0c;随着物联网技术的飞速发展&#xff0c;我国政府对智慧安监的重视程度不断提升&#xff0c;相关的政策扶持力度也在加大。在这…

Ansible--Templates 模块 Tags模块 Roles模块

一 Templates 模块 ①Jinja是基于Python的模板引擎。Template类是Jinja的一个重要组件&#xff0c;可看作一个编译过的模 板文件&#xff0c;用来产生目标文本&#xff0c;传递Python的变量给模板去替换模板中的标记。 ②在配置文件中&#xff0c;会有一些数据&#xff08;如…

CCF-Csp算法能力认证, 202212-1现值计算(C++)含解析

前言 推荐书目&#xff0c;在这里推荐那一本《算法笔记》&#xff08;胡明&#xff09;&#xff0c;需要PDF的话&#xff0c;链接如下 「链接&#xff1a;https://pan.xunlei.com/s/VNvz4BUFYqnx8kJ4BI4v1ywPA1?pwd6vdq# 提取码&#xff1a;6vdq”复制这段内容后打开手机迅雷…

前端双语实现方案(VUE版)

一、封装一个lib包 结构如下 en.js use strict;exports.__esModule true; exports.default {sp: {input: {amountError: Incorrect amount format},table: {total: Total:,selected: Selected:,tableNoData: No data,tableNoDataSubtext: Tip: Suggest to recheck your fil…

LeetCode 110. 平衡二叉树

LeetCode 110. 平衡二叉树 1、题目 题目链接&#xff1a;110. 平衡二叉树 给定一个二叉树&#xff0c;判断它是否是 平衡二叉树 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;true示例 2&#xff1a; 输入&#xff1a;root [1,2…

AI写作助手:推荐顶级论文写作工具

ChatGPT生成内容需要注意的问题 永远不要直接提交未经修改的AI文本使用工具如Quillbot、Versabot(支持中文论文生成和润色)、Paraphrasing Tool和Jasper来改变文本的措辞亲自修改短语、句子和文本的其他元素提示ChatGPT重新写自己的文本&#xff0c;并通过多个草稿进行修订 Ch…

如何把多个文件(夹)向上移动1层(或多层)(在批量复制前或后进行)

首先&#xff0c;需要用到的这个工具&#xff1a; 度娘网盘 提取码&#xff1a;qwu2 蓝奏云 提取码&#xff1a;2r1z 假定情况是&#xff0c;我要把下图里的4个文件夹内部的全部文件&#xff0c;合并到04的当前位置来&#xff08;4个文件夹里面各有5个兔兔的图片&#xff09…

【吃透Java手写】2-Spring(下)-AOP-事务及传播原理

【吃透Java手写】Spring&#xff08;下&#xff09;AOP-事务及传播原理 6 AOP模拟实现6.1 AOP工作流程6.2 定义dao接口与实现类6.3 初始化后逻辑6.4 原生Spring的方法6.4.1 实现类6.4.2 定义通知类&#xff0c;定义切入点表达式、配置切面6.4.3 在配置类中进行Spring注解包扫描…

华为ensp中BFD和OSPF联动(原理及配置命令)

作者主页&#xff1a;点击&#xff01; ENSP专栏&#xff1a;点击&#xff01; 创作时间&#xff1a;2024年5月6日20点26分 BFD通常指的是双向转发检测。BFD是一个旨在快速检测通信链路故障的网络协议&#xff0c;提供了低开销、短延迟的链路故障检测机制。它主要用于监测两个…

start.spring.io不支持java8,idea使用阿里云又报错

做项目的时候&#xff0c;我们可以发现&#xff0c;访问https://start.spring.io/ 创建脚手架项目的时候&#xff0c;最低是java 17了 但是对于很多项目来说&#xff0c;还是在用java8&#xff0c;这该怎么办呢&#xff1f; 值得庆幸的是&#xff0c;阿里云也同样有相同功能的…

VASP_AIMD+VASPKIT计算含温力学性质

材料的力学性质一直是DFT计算的重要方向&#xff0c;笔者在以往已有针对于静态结构的力学性质诸如弹性常数的相关计算&#xff0c;同时可通过VASPKIT借助相关方程导出力学性能。 bashvaspvaspkit能量应变计算弹性常数 vaspkit计算弹性常数的对称性指定 vaspkit计算弹性常数脚…

visual studio 2017重命名解决方案或项目名称

1.解决方案->右键->重命名->新的名字 2.项目->右键->重命名->新的名字 3.修改程序集和命名空间名称 项目->右键->属性->修改程序集名称和命名空间名称 4.搜索换名 Ctrl-F->输入旧名称->搜索->将所有旧名称改为新名称&#xff08;注意是整…