原文作者:Volker Hilsheimer
观看新版本亮点:
在此版本中,我们专注于改进和稳定现有功能。自Qt 6.7以来,我们已修复了500多个错误并提升了性能,您的现有代码无需改动即可更好地运行。在macOS上,Qt Quick应用程序现在可与原生菜单栏集成,要获得Windows 11的原生外观,可以使用新的Fluent风格。使用Qt 6.8,Quick窗口的大小调整在macOS上变得更快,而在Windows上,通过将默认字体数据库更改为DirectWrite,应用程序的启动时间也得到了改善。
技术预览版中的几个模块已经完善:Qt Graphs、Qt HttpServer和Qt GRPC在此版本中将得到全面支持。感谢用户的反馈,我们得以在这些模块初次作为技术预览引入后,进行大量改进并最终完成这些模块。
对于商业用户,Qt 6.8提供长周期支持,随着该版本的发布,我们将支持和维护时间从3年延长至5年。此外,我们通过提供 SPDX v2.3 格式的 Qt 库软件材料清单 (SBOM) 文档,为软件产品的创建者提供支持,使其符合欧盟即将出台的《网络弹性法案》(Cyber-Resilience Act)规定,并提供提高软件安全性所需的信息。
通过升级到Qt 6.8,您可以使现有的移动应用程序适用于运行iOS 18或Android 14的用户。
现在完全支持在Arm上开发Windows应用程序,使用户能够针对今年新推出的Microsoft CoPilot+ PC进行开发。您的桌面应用程序可以部署到 macOS 15和Arm架构的Linux桌面。这样,Qt对Arm架构的支持就涵盖了从嵌入式到移动和桌面端的所有设备类别。
作为一个全新的设备类别,您现在可以为Apple Vision Pro和Meta Quest 3 XR头显创建应用程序和用户体验。对于设备创建者,我们增加了对Raspberry Pi 5和NVIDIA AGX Orin的支持,以及对恩智浦(NXP)、韬睿(Toradex)和意法半导体(STM)等技术合作伙伴的SoC系列的支持。随着StarFive VisionFive 2的加入,Qt 6.8支持基于日益流行的新型RISC-V平台的单板计算机。
利用Qt 6.8的 "配置选项",开发者可以微调Qt的性能和效率,从而精确地满足其应用程序的特定需求。通过移除Qt框架中未使用的功能和组件,应用程序可减少多达77%的ROM使用量,降低32% 的RAM消耗,并显著加快启动速度。
请阅读我们关于减少咖啡机示例二进制文件大小的指南,以及关于构建优化Qt的文档,了解更多信息。
Qt 6.8现在全面支持Qt Graphs,为开发者创建交互式动态2D和3D可视化提供了强大的工具包。无论您是在进行科学模拟、金融图表还是实时数据分析,Qt Graphs都能提供所需的渲染功能和性能优化,让您的数据栩栩如生。Qt Graphs 3D现在支持Bars3D中的透明度,并可对标签边距、标题位置和网格线渲染进行更多控制。Qt Graphs 2D可以使用QML组件渲染自定义条形图,支持堆叠和百分比堆叠条形图,可以在条形图上显示标签,在坐标轴上显示标题,并拥有更多的数据映射API。
我们统一了2D和3D图形的主题API,并将Qt Widgets的特定API移到了单独的Qt Graphs Widgets模块中,因此纯Qt Quick应用程序不再需要链接Qt Widgets。有关我们在Qt Graphs技术预览版期间对其所做更改的更多详情,请参阅Sami 的博文。
希望从Qt Charts或Qt DataVisualization迁移的用户可在我们的文档中找到迁移指南。
Qt Multimedia一直是构建富媒体应用程序的基石,在Qt 6.8中,我们使其变得更加出色。通过QVideoFrameInput、QAbstractVideoBuffer和QAudioBufferInput,应用程序可以将自定义媒体数据发送到录制会话中;通过QAudioBufferOutput,可以接收解码后的音频数据以进行后处理。
在Linux桌面上,QScreenCapture现在支持 Wayland合成器,通过XDG Desktop Portal使用ScreenCast服务。
Qt Quick仍然是构建快速流畅用户界面的首选模块。在Qt 6.8中,我们进行了多项性能优化,以提高渲染速度,尤其是复杂场景的渲染速度。Qt Quick Effect Maker学会了发光和遮罩模糊,可以制作精灵动画,并将项目弯曲成圆形或弧形。这意味着在资源密集型应用程序中,动画更流畅,响应速度更快。
该版本新增的一个重要功能是Qt Quick Vector Image模块,它能将SVG文件作为可缩放矢量图形无缝集成到Qt Quick场景中。对于希望创建分辨率独立和响应灵敏UI元素的开发者来说,这是一个理想选择,可确保您的设计在不同设备和屏幕尺寸上都能保持清晰一致。在Qt Quick Shapes模块中,ShapePath元素现在可以使用任意纹理提供项目来填充形状,并应用任意变换。
有关Qt 6.8中矢量图形改进的更多信息,请参阅Eskil的博文。
QQuickRenderTarget获得了新的API,为开发者提供了对纹理处理的更多控制,并简化了Qt Quick 3D与外部引擎、框架和API的集成。
TableView现在允许开发者和最终用户移动列和行,Image和BorderImage类型可以在异步加载新设置的图像之前保留先前的图像。
Qt 6.8添加了Fluent WinUI3设计系统的实现,作为Qt Quick Control样式。这种新样式使应用程序在Windows 11上看起来更像原生应用,但它是使用Qt Quick基元实现的,并可用于所有平台。
在macOS上,QuickMenuBar和菜单默认与系统的原生菜单栏集成。上下文菜单和其他弹出窗口也可以作为顶级弹出窗口,现在这已成为桌面平台上Qt Quick对话框的默认行为。应用程序可以使用新的popupType属性来控制每个弹出窗口。
随着虚拟现实、增强现实和混合现实应用的重要性与日俱增,我们很高兴在Qt 6.8中推出一个专门支持XR设备的新模块。新的Qt Quick 3D Xr模块使开发者能够更轻松地为虚拟现实(VR)和增强现实(AR)平台构建身临其境的体验,确保Qt始终是应用程序开发者的首选,无论目标设备是什么。
新模块通过手部跟踪和控制器实现了对空间输入以及空间锚点和移动的支持。这样,用户在使用Apple VisionPro或Meta Quest 2和3等OpenXR 设备时,就可以与Qt Quick 3D构建的环境进行交互。
为了优化头戴式显示器的渲染性能,我们在Qt Quick场景图、标准Quick项目和材质以及Qt Shader Tools构建系统集成中完成了对多视角渲染的支持。
Qt Quick 3D 6.8通过使用级联阴影贴图和百分比更接近过滤软阴影来渲染更好的阴影。
技术美术师可以通过PrincipledMaterial的新属性调整Fresnel,并根据顶点颜色属性应用蒙版。自定义材质现在支持与PrincipledMaterial相同的属性。
QNetworkAccessManager现在可通过本地套接字发送HTTP请求,应用程序可使用QFormDataBuilder轻松创建多部分HTTP消息。
在Qt Network Auth模块中,我们根据用户反馈进行了许多改进并解决了许多问题。此外,新的QOAuthUriSchemeReplyHandler类允许处理私有/自定义或 https URI方案重定向,QOAuth2AuthorizationCodeFlow类支持密钥代码交换证明。
QDnsLookup了解了TLS关联记录,现在可以通过TLS发送 DNS,并告知客户端DNS服务器是否已对数据的真实性进行了验证。
客户端现在已完全支持Qt GRPC和Qt Protobuf模块,其API已趋于稳定,并增加了对流媒体的支持。
除上述主要新增功能外,我们还对整个框架进行了一系列增强,以进一步简化开发。有关所有功能的完整列表,请查看我们的Qt 6.8新特性文档页面。
新的QChronoTimer与std::chrono集成,提高了基于时间的操作的精确度。在常用代码路径中,QString、QByteArray和QList现在可以调整大小而无需数据初始化。
QHash现在支持某些Qt类型的异构查找,特别是QString和QStringView,而QDirListing则为目录条目提供了基于迭代器的API:
usingF = QDirListing::IteratorFlag;
QDirListing dirList(u"/sys"_s, QStringList{u"scaling_cur_freq"_s},
F::FilesOnly | F::Recursive);
for(const auto&dirEntry : dirList) {
QFile f(dirEntry.filePath());
if(f.open(QIODevice::ReadOnly))
qDebug() << f.fileName() << f.readAll().trimmed().toDouble() / 1000 <<"MHz";
}
针对Android平台的开发者可以使用QtJniTypes命名空间声明带有JNI签名的Java 类型,并在通过QJniObject与JNI交互时依赖编译时签名生成。QJniArray类型可让您轻松地从C++代码中使用 Java数组。
Q_DECLARE_JNI_CLASS(TimeZone,"java/util/TimeZone");
使用命名空间QtJniTypes;
constQJniArray availableIDs = TimeZone::callStaticMethod<String[]>("getAvailableIDs");
为(const auto&availableID : availableIDs){
// ~~~
}
我们还继续为Qt值类型添加对C++20 space-ship运算符<=>()的支持,QPointF和QMarginsF等浮点几何类型现在支持模糊比较和空值检查。
使用Qt 6.8开发的应用程序现在可以显式请求颜色方案,以显式的深色或浅色外观覆盖系统设置:
应用程序还可以覆盖上下文菜单触发器,以提供跨平台的一致应用程序行为。
我们对色彩空间支持做了一些补充,并增加了更多的API,以便对字体的合并和样式策略进行精细控制。
辅助功能框架现在支持属性报告,并允许应用程序引发公告事件,供辅助技术使用。
Qt SQL模块的用户现在可以指定数值精度策略,QSqlDatabase可以更改数据库连接的线程亲和性。PostgreSQL和 MySQL/MariaDB驱动程序现在可以在服务器与客户端位于不同时区时正确处理日期和时间数据。
测试作者现在可以让失败或跳过的测试抛出异常,从而更容易编写使用子例程的测试。超时宏现在可接受std::chrono字面量,从而使测试代码更具可读性。
新的QWebEngineFrame类添加了特定于框架的API,例如在特定框架上打印或运行JavaScript。QWebEngineClientHints可让应用程序能够更好地控制浏览器标识,而QWebEnginePermission则可轻松管理新旧网站权限。
我们对高DPI显示器的渲染代码进行了多项改进,使基于Widget的应用程序在所有屏幕类型上都能清晰显示。
我们的文档生成器QDoc与 Clang互连,现在要求最低Clang 17。它已从基于C的 API 转向基于C++的API。这提高了我们在QDoc中实现对新C++语言特性支持的能力。此外,QDoc还扩展了一系列新命令。具体细节请查看发布说明。
QML Language Server现在提供语义语法高亮显示,改进了对JavaScript语言的支持,可为Quick类型生成片段,并提供文档提示。
有了这些强大的新功能和性能改进,Qt 6.8将继续赋能开发者在各种平台上构建响应迅速、视觉上引人入胜和媒体丰富的应用程序。我要感谢所有帮助实现Qt 6.8的贡献者。您可以在发布说明的末尾找到为Qt源代码提供补丁的所有社区成员的完整列表。特别感谢所有通过报告错误、向我们提供反馈和贡献,或告诉我们您使用案例来帮助 改进Qt的各位。最后但同样重要的是,我要感谢所有参与发布的人员!
我们迫不及待地想看到您如何利用最新版本的Qt创建下一代应用程序。立即升级到Qt 6.8,让您的项目更上一层楼!