首页/文章/ 详情

Qt 6.11正式发布!

4月前浏览320

Qt Framework 6.11版本现已发布,在图形、连接性和语言能力方面带来了性能提升和新技术的支持,同时还引入了全新的异步C++编程方式。让我们来一探究竟。


发布概览


本次发布同样带来了大量改进、修复和新功能。我们来看一下更新亮点。


硬件加速2D渲染

新增模块Qt Canvas Painter,基于HTML Canvas 2D Context,可带来性能和开发效率的双重提升。更多详情请参阅《2D 渲染性能与效率提升:Qt Canvas Painter》。


3D功能改进

新的渲染技术:屏幕空间全局光照(SSGI)作为光照贴图烘焙的选项,以及屏幕空间反射(SSR)。同时,基于运动向量的时域抗锯齿算法也得到了改进。更多信息请参阅《全新实时渲染技术:SSGI与SSR》


QML中新增了可由用户定义的渲染通道,可直接实现后期处理效果、颜色拾取、图层蒙版等功能。更多详情请参阅高级渲染通道自定义。


交互式图表

您现在可以实现自定义图表,由用户定义的委托渲染每个数据点。新增了Qt示例——风力涡轮机仪表盘,并进行了多项改进,例如折线图的新样式方案以及3D图表的多坐标轴支持。详情请参阅《创建与交互图表的新方式》。


异步编程的声明式方法


Qt Task Tree为Qt中的异步编程和C++ API设计带来了全新方法。此外,各类API已实现统一,使任何异步任务都能适配该新模块。详情请参阅

《异步编程的声明式方法:Qt TaskTree》。


其他改进


矢量图形、控件和无障碍功能的改进。详情请参阅UI框架和2D新增功能。


通过新模块Qt OpenAPI,连接网络服务现在更加便捷。详情请参阅《网络与连接性改进》。


在IDE中实现QML与C++之间的跳转,以及将C++后端数据提供给Qt Quick使用,都变得更加简单。详情请参阅《更简单的QML与C++集成》。


此外还有大量其他改进,涵盖多媒体、Android及API文档等领域。详情请参阅《还有哪些新功能?》。


提升性能和生产力:专为2D渲染而生的Qt Canvas Painter


本次发布带来了使用Qt进行2D图形绘制的新方式:Qt Canvas Painter。这是一个全新的模块,基于Qt的渲染硬件接口(RHI)构建,具备命令式2D图形渲染能力。硬件加速为您的UI图形带来了显著的性能提升,基准测试显示,相比之前的QPainter OpenGL后端模块,其速度有了大幅提升。


Qt Canvas Painter严格遵循大家熟悉的HTML Canvas 2D上下文规范,得以快速上手,从一开始就提供高效生产力。


除了性能和开发效率提升,新模块还带来了一些出色的高级特性。包括可调的抗锯齿、盒状渐变和阴影、网格图案、自定义着色器画笔和颜色效果——支持现代化、视觉丰富的UI和高效的GPU驱动绘图工作流。


最佳3D框架的改进


Qt已经演进到能提供与游戏引擎相同的3D功能,同时保持一致的高性能。这意味着即使使用复杂的元素、特效或动画,使用Qt Quick 3D的UI也能流畅运行。


新的实时渲染技术:SSGI、SSR和运动矢量

Qt 6.10版本改进了光照贴图烘焙技术(一种模拟光线与静态物体交互的技术),而6.11版本则引入了其动态替代方案。SSGI(屏幕空间全局光照)是一种渲染技术,可通过后处理效果模拟光线在屏幕表面上的反弹,并实时响应变化。不过,SSGI会带来一些性能代价,因此建议在资源有限的目标上使用光贴图烘焙,而在性能敏感度较低的应用上使用SSGI制作丰富的3D UI。



6.11中另一项新的实时渲染技术是屏幕空间反射(SSR)。类似于SSGI,它利用屏幕上可见的内容来渲染反射效果——其原理是对每个像素进行“光线步进”计算,并根据场景信息生成对应的反射效果。 


更多信息:

  • 参阅Jonas关于光照贴图烘焙、SSGI和SSR的博客

  • 在Qt示例中亲自试用Qt Quick 3D - SSGI Lightmap


此外,通过场景环境(SceneEnvironment)和扩展场景环境(ExtendedSceneEnvironment)类型,Qt Quick 3D支持多种用于3D物体抗锯齿渲染的技术。时域抗锯齿和运动模糊在减少动态对象的锯齿感方面表现尤为突出。在Qt 6.11中,我们新增了基于对象的动态矢量生成功能,它在计算成本和输出保真度之间实现了极佳的平衡。


高级渲染通道自定义

对于需要高级视觉效果、优化性能或集成自定义技术而需要超越默认渲染管道的用户,Qt Quick 3D现在提供了自定义渲染通道的选项。新的图层和标签API可以指定哪些项目应包含在渲染管道的不同部分,将它们导向不同的渲染目标,并对单个渲染通道进行控制。你可以复用现有的材质,用附加着色器增强材质,或覆盖材质的某些方面。所有这些新增的灵活性都可通过QML直接使用。


查看Qt 6.11中Qt Quick 3D的更多示例:


  • Antti关于使用 Qt Quick 3D 粒子制作雨雪效果的博客

  • Sadegh关于如何使用真实 IES 配置文件实现体积光轴的博客


创建和交互图表的新方法


在图表方面,我们提供了一个新的Qt示例——风力涡轮机仪表盘,展示了从简单的2D演示到复杂的3D图表,来创建和组合数据可视化方案。这些图表在样式、标签或用户交互方面都具备高度的可定制性。 



亲自试用:风力涡轮机仪表盘可在Qt示例中找到(请确保已安装Qt Graphs模块)


在这个新示例中,您可以看到3D图形现在支持多坐标轴展示。您可以为QBar3DSeries中的rowAxis、valueAxis 和columnAxis属性,或QScatter3DSeries和QSurface3DSeries中的axisX、axisY和axisZ属性使用不同的轴实例。我们为Graphs模块中的不同元素添加了多个新属性,以便对图形的渲染方式进行更多控制,从覆盖单个轴的主题颜色和区域图形中的渐变到折线图的线条、描边和连接样式。Bar3DSeries中的标签可以更灵活地自定义和定位,QDateTimeAxis可以使用时区并允许平移和缩放,QSplineSeries::optimized和GraphsItem3D.cutoffMargin等属性允许进一步微调。


如果这还无法满足您的需求 ,新的CustomSeries类型允许实现完全自定义的图形,可为每个数据点定义其专属的渲染方式。 

 

异步编码的声明式方法:Qt TaskTree


Qt TaskTree是一个新模块,在Qt 6.11中作为技术预览版提供。


Qt TaskTree为Qt的API设计带来了全新的视角,为C++引入了一种声明式描述方法。异步工作流通过recipe(一个传递给TaskTree的可复用对象)以声明式描述的形式表达,然后由任务树自动管理整个流程。这清晰地将工作流与模板代码分离,使得代码比传统方法更具可读性。任务树会自动为您处理繁琐的任务,即使面对复杂的工作流,也能在一个地方清晰而精确地描述出来。



此外,Qt TaskTree还解决了API不兼容的问题,将各种异步API统一到一个通用接口中,并允许调整任何异步任务,使其与模块协同工作。


Qt TaskTree是一项重大变革,它从根本上改变了我们编写和读取异步代码的方式。


更多信息:

  • 参阅Jarek的博客:Qt TaskTree模块介绍

  • 访问Qt TaskTree文档

  • 在线试用Task Tree Demo 


其他显著改进


Qt 6.11发布的其他一些重大改进包括UI框架的新功能、更便捷的Web服务连接和其他连接性改进,以及更轻松地集成QML和C++。


UI框架和2D新增功能

在改进对Lottie和SVG矢量动画的支持方面,我们得到了很多很好的反馈。现在Qt 6.11中,我们继续推进这项工作。我们现在支持路径和形变动画,以及遮罩层、SVG遮罩和SVG符号。我们遵循CSS动画时序函数的预定义子集,并且用于Qt Quick VectorImage模块的Lottie后端以及lottietoqml工具现已结束技术预览阶段,正式进入稳定状态。


在UI框架方面,我们为Qt Quick Controls添加了备受期待的DoubleSpinBox,添加了控制 DialogButtonBox中默认按钮处理的API,并允许独立控制 RectangularShadow效果的角半径。


对于Qt Widgets用户,我们整合了多项贡献,新增以下功能:为QWizard添加新的StretchBanner选项、支持通过新的keyboardSearchFlags调整 QAbstractItemView默认键盘搜索行为的可能性,以及控制QColumnView中预览列可见性的能力。


在Qt Quick Controls和Qt Widgets中,我们改进了无障碍客户端在UI元素间导航的方式,以及获取角色和方向变更通知的方式。


Web和连接性改进

在Qt 6.11中,我们继续关注与Web服务的集成。有了Qt OpenAPI模块,可以轻松生成使用Qt Networks RESTful API的Qt HTTP客户端代码。该生成器是OpenAPI Generator的一个插件,因此它可以使用OpenAPI YAML规范,具有高度可定制性,并与CMake构建系统集成。


更多信息:

  • 阅读Tatiana关于Qt 6支持OpenAPI的博客

  • 访问Qt Open API文档

  • 试用ChatGPT RESTful API客户端示例


对于Qt GRPC,我们新增了控制请求和响应流程及内容的机制。Qt HTTP Server模块通过多项改进,让实现可扩展服务器更容易,包括对限制参数的控制,以及在工作线程中处理响应的能力。在底层,QNetworkRequest现在可以为当前请求指定TCP Keep Alive参数,默认情况下,非活跃连接将在2分钟无活动后自动终止。


简化QML与C++的集成

QML语言服务器现在能识别QML类型的C++定义所在位置,从而可以在IDE中轻松地实现两种语言之间的跳转。C++代码可以通过ID查找QML对象,并且现在可以轻松遍历QML上下文的层次结构。在C++中声明的属性可以显式标记为virtual和overrides,以防止属性被意外遮蔽。


继Qt 6.10中引入QRangeModel后,QRangeModel又新增了一个配套类QRangeModelAdapter,它提供了一个遵循QAbstractItemModel协议的C++API,用于修改模型数据。对于每一行或每个项都由相同的QObject子类支持的数据,QRangeModel可以自动将每个对象的属性更改通知连接到dataChanged() 信号,从而无需额外代码即可让UI及时了解数据变化。这样,无需使用QAbstractItemModel API,Qt Quick(或Widget)项目视图就能更轻松地使用来自C++后端代码的数据。


更多信息:

  • 阅读Sami关于QML语言服务器和linter新增功能的博客

  • 阅读我关于QRangeModel更新和QRangeModelAdapter的博客


还有什么新内容?

以上重点介绍了Qt 6.11中的一些重要新增功能。在"Qt 6.11新特性"文档中,您还会发现许多其他特性,例如用于实时音频处理的新Qt Multimedia API。由于Qt Jenny、QtQuickView和退出QJniObject默认异常处理功能的改进,针对Android平台的开发人员将发现从C++调用Java/Kotlin API,反之亦然。


如果您使用qdoc为自己的API编写文档,您会发现一长串新命令,这些命令尤其适用于现代C++使用概念。改进后的现代C++API到HTML的渲染,使得阅读Qt中一些模板繁重的API更加容易。


致谢


感谢所有为Qt 6.11发布做出贡献的各位。您可以在发布说明的末尾找到为Qt源代码提供补丁的所有社区成员的完整列表。


特别感谢所有通过报告缺陷、分享使用场景以及提供反馈来帮助Qt变得更好的朋友们,尤其是在Beta测试期间针对技术预览模块和新功能提出的宝贵意见。最后,我要感谢所有参与发布工作的人员!


来源:IFD优飞迪
ACT通用UM游戏控制渲染管道DAP
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2026-05-27
最近编辑:4月前
优飞迪科技
赋能新仿真,创优新设计
获赞 326粉丝 351文章 540课程 4
点赞
收藏
作者推荐
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈