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版本做好准备!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

证照之星是什么软件 证照之星哪个版本好用?证照之星支持哪些相机 证照之星XE免费版

许多人都需要使用证件照&#xff0c;为了满足这一需求&#xff0c;人们会使用照相机、手机、电脑等工具进行拍摄。除此之外&#xff0c;市面上还存在专门的证件照拍摄软件&#xff0c;比如证照之星。那么&#xff0c;各位小伙伴是否了解证照之星哪个版本好用&#xff0c;证照之…

什么?你设计接口什么都不考虑?

如果让你设计一个接口&#xff0c;你会考虑哪些问题&#xff1f; 1.接口参数校验 接口的入参和返回值都需要进行校验。 入参是否不能为空&#xff0c;入参的长度限制是多少&#xff0c;入参的格式限制&#xff0c;如邮箱格式限制 返回值是否为空&#xff0c;如果为空的时候是…

单位个人如何向期刊投稿发表文章?

在单位担任信息宣传员一职以来,我深感肩上的责任重大。每月的对外信息宣传投稿不仅是工作的核心,更是衡量我们部门成效的重要指标。起初,我满腔热血,以为只要勤勉努力,将精心撰写的稿件投至各大报社、报纸期刊的官方邮箱,就能顺利登上版面,赢得读者的青睐。然而,现实远比理想骨…

6、Qt—Log4Qt使用小记1

开发平台&#xff1a;Win10 64位 开发环境&#xff1a;Qt Creator 13.0.0 构建环境&#xff1a;Qt 5.15.2 MSVC2019 64位 一、Log4Qt简介 Log4Qt是使用Trolltech Qt Framework的Apache Software Foundation Log4j包的C 端口。它旨在供开源和商业Qt项目使用。所以 Log4Qt 是Apa…

OSPF实验

OSPF单区域实验案例 需求 实现全网互联互通 配置步骤 配置PC接口IP地址 配置路由器的接口IP地址 配置OSPF 创建ospf进程&#xff0c;定义router-id指定相应区域宣告网段进入ospf 验证结果 配置命令 第一步&#xff1a;配置PC接口IP地址 第二步&#xff1a;配置路由器接口…

Leaflet.canvaslabel在Ajax异步请求时bindPopup无效的解决办法

目录 前言 一、场景重现 1、遇到问题的代码 2、问题排查 二、通过实验验证猜想 1、排查LayerGroup和FeatureGroup 2、排查Leaflet.canvaslabel.js 三、柳暗花明又一村 1、点聚类的办法 2、歪打正着 总结 前言 在上一篇博客中介绍了基于SpringBoot的全国风景区WebGIS按…

【多模态】31、Qwen-VL | 一个开源的全能的视觉-语言多模态大模型

文章目录 一、背景二、方法2.1 模型架构2.2 输入和输出2.3 训练 三、效果3.1 Image Caption 和 General Visual Question Answering3.2 Text-oriented Visual Question Answering3.3 Refer Expression Comprehension3.4 视觉-语言任务的少样本学习3.5 真实世界用户行为中的指令…

BGP(border gateway protocol)边界网关协议初识篇

BGP它是一种路径矢量协议&#xff0c;用于决定数据包在互联网中的最佳路径。 1、工作原理&#xff1a; 自治系统&#xff08;AS&#xff09;间路由: BGP主要用于连接不同自治系统之间的路由器&#xff0c;其中每个自治系统&#xff08;AS&#xff09;代表一组具有共同路由的网…

Rust构造JSON和解析JSON

目录 一、Rust构造JSON和解析JSON 二、知识点 serde_json JSON 一、Rust构造JSON和解析JSON 添加依赖项 cargo add serde-json 代码&#xff1a; use serde_json::{Result, Value};fn main() -> Result<()>{//构造json结构 cpu_loadlet data r#"{"…

【C -> Cpp】由C迈向Cpp (6):静态、友元和内部类

标题&#xff1a;【C -&#xff1e; Cpp】由C迈向Cpp &#xff08;6&#xff09;&#xff1a;静态、友元和内部类 水墨不写bug &#xff08;图片来源于网络&#xff09; 目录 &#xff08;一&#xff09;静态成员 &#xff08;二&#xff09;友元 &#xff08;三&#xff09…

想让普通金额数字显示为逗号分隔的数字?

使用vueelement 后台传的数据 1.编写方法 放在method当中 /** 数字转换显示格式 */priceFormat (num, n) {n n || 2;let symbol ",";if (num null) return num;if (typeof num ! number) throw new TypeError(num参数应该是一个number类型);if (n < 0) thro…

eNSP中小型园区网络拓扑搭建(上)

→b站直通车&#xff0c;感谢大佬← →eNSP中小型园区网络拓扑搭建&#xff08;下&#xff09;← 不带配置命令的拓扑图已上传~ 项目背景&#xff1a; 某公司准备新建一张网络供企业办公使用。写字楼共3层&#xff0c;一层会客大厅、二层行政部及市场部、三层研发部。一层设…

基于java的超级玛丽游戏的设计与实现(论文 + 源码)

Java的超级玛丽游戏.zip资源-CSDN文库https://download.csdn.net/download/JW_559/89313347 基于java的超级玛丽游戏的设计与实现 摘要 近年来&#xff0c;Java作为一种新的编程语言&#xff0c;以其简单性、可移植性和平台无关性等优点&#xff0c;得到了广泛地应用。J2SE称…

容联云零代码平台容犀desk:重新定义坐席工作台

在数智化浪潮的推动下&#xff0c;企业亟待灵活适应市场变化、快速响应客户需求&#xff0c;同时还要控制成本并提升效率&#xff0c;传统的软件开发模式因开发周期长、成本高、更新迭代慢等问题&#xff0c;逐渐难以满足企业灵活多变的业务需求。 容犀Desk&#xff0c;观察到…

Linux网络编程——HTTP协议的理解与运用

目录 前言 一、认识URL 二、认识HTTP样例 三、HTTP的报头内容 1.url 2. Content-Type 3.Method 方法 1.GET方法 2.POST方法 4、状态码 5.cookie和session 前言 我们知道&#xff0c;协议就是一种约定&#xff0c;客户端与服务端统一的用这种约定进行传输数据。我们…

如何快速优雅的免费申请和搭建属于自己的服务器

今天来讲一下如何快速优雅的搭建属于自己的服务器&#xff0c;我们以阿里云的云服务器为例&#xff0c;新用户一般是有三个月使用期限。 首先我们进入官网&#xff0c;选择云服务器ecs 链接直达&#xff1a;https://cn.aliyun.com 打开网页后&#xff0c;往下滑&#xff0c;然…

「AIGC」Python实现tokens算法

本文主要介绍通过python实现tokens统计,避免重复调用openai等官方api,开源节流。 一、设计思路 初始化tokenizer使用tokenizer将文本转换为tokens计算token的数量二、业务场景 2.1 首次加载依赖 2.2 执行业务逻辑 三、核心代码 from transformers import AutoTokenizer imp…

ssrf初步

一&#xff0c;简介 全称&#xff1a;Server-Side Request Forgery&#xff08;中文&#xff1a;服务器端请求伪造&#xff09; 攻击者从服务端发起请求&#xff0c;让服务器连接任意外部系统&#xff0c;从而泄露敏感数据。主要利用各种协议的请求伪造&#xff0c;例如php协…

战网国际服怎么下载 暴雪战网一键下载安装图文教程

战网国际版&#xff0c;或称为Battle.net全球版&#xff0c;是暴雪娱乐构建的一项跨越国界的综合游戏交流平台&#xff0c;它无视地理限制&#xff0c;旨在服务全球每一个角落的游戏爱好者。不同于地区专属版本&#xff0c;国际版为玩家开启了一扇无门槛的大门&#xff0c;让每…

char x[]---char*---string---sizeof

字符串数组 #include <iostream>int main(){char c_str[]"abcd";char c_str1[]{a,b,c,d};std::cout<<sizeof(c_str)<<std::endl;std::cout<<sizeof(c_str1)<<std::endl;return 0; } char*存储的字符串个数 char*字符串所占字节大小 c…