Qt 6.8 中的新功能

Qt 6.8 中新增和恢复的模块

Qt 6.8 新增了以下模块和工具:

  • 用于从 SVG 文档生成 QML 代码的svgtoqml工具现已发布技术预览版。该工具支持SVG Tiny 1.2 配置文件的静态子集。
  • 该工具支持 Qt Graphs, Qt HTTP Server, Qt ProtobufQt GRPC模块都已从技术预览状态升级。
  • 添加了 Qt Quick Vector Image模块,用于在Qt Quick 场景中将 SVG 文档显示为可缩放矢量图形。

Qt 6.8 中删除的模块

以下模块已被弃用。我们强烈建议不要在新代码中使用它。

Qt 3D 模块

模块 Qt 3D模块已被弃用。Qt 3D 仍然是授权软件的一部分,也仍然是 Qt Project 的一部分。在未来的版本中,该模块将继续与其他模块集成。关键错误和安全漏洞将由 KDAB 的模块维护者处理。关于新特性和新功能,用户应发送电子邮件至 info@kdab.com 与 KDAB 联系。

Qt 6.8 中的新功能

Qt Core 模块

Qt Graphs 模块

Qt Graphs3D

Qt Graphs2D

Qt GRPC 模块

  • Qt GRPC已升级为技术预览版。
  • 为 GrpcQuick 模块添加了流媒体支持。
  • 删除了 QGrpcInterceptor、QGrpcInterceptorManager 和 QGrpcInterceptorContinuation。
  • QGrpcClientStream 和 QGrpcBidirStream 添加了writesDone() 方法,以便从客户端半关闭流。

Qt GUI 模块

Qt Multimedia 模块

Qt Network 模块

Qt Network 认证模块

  • 已添加QOAuthUriSchemeReplyHandler 类,用于处理私人/自定义和 https URI 方案重定向(支持的平台:iOS、Android 和 macOS)。
  • QOAuth2AuthorizationCodeFlow 类添加了密钥代码交换证明 (PKCE) 支持。PKCE 是一项推荐的安全措施,可减轻授权代码拦截攻击。
  • 根据几位用户的意见,我们回头处理了许多问题,目的是全面改进 qnetworkauth。这包括一些错误修复、改进、弃用、文档添加,以及帮助入门的概述文档。

Qt Positioning 模块

  • Qt Positioning Android 后端现在可以在 Android 14 及更高版本上以MSL 格式提供高度。

Qt Protobuf 模块

  • 模块 Qt Protobuf模块已升级为技术预览版。

Qt QML 模块

  • QML Language Server 添加了新功能:语义高亮、更多 JavaScript 语言支持、Quick 类型的片段支持、文档提示、QML 文件重命名、.qmllint.ini 警告配置支持
  • 新增两个影响qt_add_qml_module行为的CMake 策略QTP0004简化了使用嵌套文件夹结构时 QML 模块的使用。QTP0005允许在指定导入和依赖关系时使用目标。

Qt Quick 编译器

  • Qml 脚本编译器现在能记录 Qml 到 Cpp 的编译统计信息。在项目中运行 all_aotstats 目标即可显示这些信息。

Qt Quick 模块

  • 添加了 font.contextFontMerging,可用于启用新的字体合并算法,在选择后备字体时将全文考虑在内。这可能会增加一些成本,但在某些情况下会带来更好的效果。
  • 添加了 font.preferTypoLineMetrics 属性,即使字体没有手动设置USE_TYPO_METRICS标志,也可以将其设置为始终优先使用 OpenType 字体中的排版行度量。
  • ImageBorderImage 添加了retainWhileLoading 属性。在异步加载的图像上设置为true 时,当前图像数据将保留到新图像完全加载完毕。这可以避免闪烁。
  • 已添加PlanarTransform ,这是一个实用程序对象,提供用于指定二维变换矩阵的简单函数。
  • 已添加PathRectangle ,这是一个可选的圆角矩形路径,用于ShapePathView
  • 添加了Drag.imageSourceSize 属性,用于控制代表被拖动数据的图像的大小。
  • 添加了QQuickRenderTarget::depthTexture ,用于设置自定义深度纹理。
  • 添加了QQuickRenderTarget::Flag 枚举器,允许在通过命名构造器构造时指定视图格式。
  • TableView 现在已支持以编程和交互方式移动 和 。columns rows
  • 所有标准的Qt Quick 项目和材质都与多视图渲染兼容。当 2D 内容嵌入Qt Quick 3D XR 场景并启用多视图渲染时,应用程序可以透明地使用多视图渲染。多视图渲染可以提高 AR/VR 设备的渲染性能并降低功耗。
  • 通过QSGMaterial::viewCount() 可以创建多视图兼容的自定义材质 (QSGMaterial,QSGMaterialShader)。
  • 通过QQuickRenderTarget 中的 "多视图渲染"功能,新增了对将Qt Quick 渲染导入 2D 纹理阵列的支持。这可通过QQuickRenderTarget::fromVulkanImage() 等函数的新重载来实现,并为使用 Qt Quick 3D.
  • QQuickRenderTarget 中添加了在渲染过程结束时自动执行multisample resolve 的支持。在此之前,只有针对多采样纹理才能对重定向的Qt Quick 场景进行多采样渲染,而解析工作则由应用程序或其着色器完成。启用后,Qt Quick 现在会自动创建中间多采样纹理作为色彩缓冲,并自动解析到应用程序提供的非多采样纹理。这样就可以使Qt Quick 渲染目标纹理,这些纹理由外部引擎、框架或 API(如 OpenXR)提供,而这些外部引擎、框架或 API 只提供并消耗非多重采样纹理。
  • QQuickRenderTarget 中添加了对setting a depth texture 的支持。这允许指定应用程序自己的纹理(或纹理数组,使用多视图渲染时)来写入深度数据,而不是使用 Qt 自己的中间缓冲区。当深度数据必须写入外部引擎、框架或 API(如 OpenXR)提供的深度纹理时,这一点尤其有用。
  • 新增了对在QQuickRenderTarget 中指定纹理视图格式的支持。在QQuickRenderTarget::fromVulkanImage() 和类似的新重载中,可通过viewFormat 参数指定纹理视图格式。该功能专门用于从纹理格式中删除或添加 sRGB 修饰符,在处理外部引擎、框架或 XR 合成器提供的纹理时非常有用,因为在这些情况下无法控制纹理格式,但 3D API 在着色器写入时的隐式线性->sRGB 转换是不可接受的(例如,因为Qt Quick 3D 材质流水线已经执行了相同的操作)。
  • QQuickRenderTarget重新设计了深度/模板和多采样色彩数据中间缓冲区的内部管理。调用QQuickWindow::setRenderTarget() 不再会使所有内部临时缓冲区失效,而是在大小、格式和其他参数匹配的情况下尝试重复使用。如果应用程序和程序库必须在每一帧向QQuickWindow 传递不同的本地纹理(例如,由于纹理来自由外部引擎、框架或 XR 合成器维护的缓冲池),这有望提高性能。

Qt Quick Controls 模块

  • 已添加FluentWinUI3 风格,这是一种现代原生外观风格,专为运行 Windows 11 及以上版本的平台而设计。
  • Popup 和派生类型添加了一个新属性popupType 。该属性可用于控制弹出窗口是在场景内,还是出现在自己的顶层弹出窗口中。
  • macOS 风格现在能够创建本地menusmenubars
  • 来自(内部)QtQuick.Controls.impl模块的类型,如PaddedRectangleMnemonicLabel或类似类型,不会再意外暴露给任何导入QtQuick.Controls或任何控件样式的文档。这些类型属于私有 API,如果没有明确导入QtQuick.Controls.impl,是不可能接触到的。

Qt Quick 形状模块

  • 添加了ShapePath.fillItem属性。该属性可用于获取任何纹理提供项(如分层项和图像)并将其用作形状的填充。
  • 添加了ShapePath.fillTransform属性,该属性可用于为形状的填充设置任意变换,无论是项目还是渐变。

Qt Quick 3D 模块

  • XR 支持的技术预览Qt Quick 3D
    • 支持使用 OpenXR 的头戴式显示器(HMD),如 Meta Quest 2 和 3。
    • 支持 Apple Vision Pro。
    • 多视角渲染(一次渲染双眼)。
    • 通过手部追踪或控制器支持空间输入。
    • 支持空间锚点
  • 改进阴影渲染
    • 整体质量提高
    • 增强的阴影调试工具
    • 级联阴影贴图
    • 百分比闭合过滤 (PCF) 柔光阴影
  • PrincipledMaterial 增强功能
    • 调整菲涅尔的附加参数
    • 支持基于顶点颜色属性的属性屏蔽。
  • CustomMaterial:从PrincipledMaterial 公开其余属性。

Qt Quick 矢量图像模块

  • 引入VectorImage :一个可用于直接渲染矢量图形的组件Qt Quick ,具有硬件加速功能,无需预光栅化。它目前支持 SVG 格式(SVG Tiny 1.2 profile 的静态子集)。

Qt XMLShader Tools 模块

  • 完成了对与多视图渲染兼容的着色器的支持。为Qt XMLShader Tools 构建系统集成添加了MULTIVIEW 关键字。
  • 为通过qt_add_shaders() 在构建时处理的着色器添加了 depfile 支持。现在,当下次构建项目时,触碰着色器中通过#include 指令包含的文件将触发对该着色器文件的重新编译。

Qt SQL 模块

Qt Test 模块

  • 添加了QTEST_THROW_ON_FAILQTEST_THROW_ON_SKIP C++ 宏和环境变量,定义后可更改QCOMPARE()/QVERIFY()/QSKIP() 等在测试失败时退出测试函数的方式。这些宏和环境变量不是返回,而是抛出一个特殊异常,从而从测试函数的子函数退出,一直到 QtTestLib。
  • QTRY_*_WITH_TIMEOUT宏现在也接受 chrono 字面量(原为:int 毫秒)。
  • QTest::failOnWarning() 现在有了无参数重载,以支持常见的 "fail-on-any-warning "情况,而无需构建匹配一切的正则表达式。
  • QSignalSpy 不再继承于 。如果您的代码使用了 is-a 这一事实,则需要重新设计。QObject QSignalSpy QObject
  • 当连接失败时,QSignalSpy::signal() 方法不再一定返回空字节数组。使用现有的isValid() 方法来确定给定的QSignalSpy 对象是否监听了有效对象上的有效信号。
  • QCOMPARE_xx 宏现在只能查找QTest::toString() 扩展,这些扩展要么是通过相关类型的参数依赖查找(Argument Dependent Lookup)找到的,要么是QTest::toString<T>() 模板的实例化。这与QCOMPARE() 宏的行为一致。

Qt WebEngine 模块

工具

QDoc 文档生成器

  • 现在,您可以使用\keyword 命令链接到章节标题,以改进上下文相关帮助。
  • 对于未注明的属性访问函数,QDoc 不再错误地链接到不存在的文档。
  • 构建系统不再定义QDOC2_COMPAT
  • 生成 DocBook 输出时,QDoc 不再多次转义字符。
  • \instantiates 命令已被弃用。请使用新的\nativetype 命令。旧命令现在会委托给新命令,QDoc 会生成一个关于该命令已被弃用的通知。
  • 您可以指定auto 作为函数的返回类型,以便在生成的文档中屏蔽完整类型。
  • 改进了 API 文档中必要条件表的格式。
  • QDoc 在输出到 stdout 时减少了重复报告。
  • .qhp 文件现在可(正确)包含在没有相关\group 文档时使用\ingroup 命令创建的组项的条目。
  • QDoc 现在可为 .qhp 文件中的命名空间生成标题,而不仅仅是类和类型。
  • QDoc 现在能正确解析-DDEFINE=VALUE 命令行选项。
  • 如果出现以下情况,QDoc 将生成新的警告:
    • qhp 子项目 indexTitle 属性未找到。
    • 同一 C++ 类多次使用\nativetype 命令时。
    • 每个项目多次生成文件时。
    • 之前被选为重载的函数未明确使用\overload 命令标记,但由于排序变化而被选为主要签名。这些函数必须有完整的文档记录或使用\overload 命令标记。
  • QDoc 不再对重载构造函数中的未注明参数发出警告,并删除了一些不必要的链接警告。
  • 链接警告现在会报告合理的位置。
  • QDoc 现在需要 Clang 17 或更新版本。
  • QDoc 手册进行了多项更新。
  • 您可以使用新的\tm 命令标记商标。如果定义了配置变量navigation.trademarkspage ,商标符号 (tm) 就会成为指向该页面的链接。
  • \deprecated command 现在可接受未来版本。
  • QDoc 宏参数现在可接受格式化命令。
  • \compareswith 命令现在允许使用括号括起来的参数。
  • -outputdir 命令行选项现在相对于当前工作目录。此外,nosubdirs 配置变量不再混淆outputdir 中的内容。
  • 删除了未使用和未记录的clangdefines 配置变量。
  • QDoc 不再生成.qhp.sha1 文件。
  • QDoc 现在可为目录中的条目生成唯一引用。
  • 在生成 HTML 输出时,QDoc 现在只使用translate="no" 来装饰指向 API 实体的链接。
  • 减少了多项目文档构建时的名称碰撞。这可能会影响某些配置中生成的文件名。
  • 现在可以使用新的\qtcmaketargetitem 命令指定 CMake 目标。
  • 删除了对下标函数参数的支持。该功能未被记录、未被使用,而且错误百出。移除该功能可省去在每个已记录的函数签名和\a 命令参数上构建和尝试匹配正则表达式的过程。
  • 指向函数签名的链接现在在外观上更加一致。
  • QDoc 现在支持在 QML 文档中从 C++ 枚举自动生成值。
  • outputprefixesoutputsuffixes 配置变量现在适用于 C++ 类型文档以及 QML 类型和模块文档。这在两个或更多模块定义相同类型名称的多模块文档配置中非常方便。

平台变更

桌面平台

基于 Arm 的桌面

  • 现在,您可以在基于 Arm 的 Windows 桌面上构建和开发 Qt 和 Qt 应用程序。
  • 现在,您可以在基于 Arm 的 Linux 桌面上构建和开发 Qt 和 Qt 应用程序。

Windows

  • 更改字体系统,将 DirectWrite 用作默认后端。这将启用一些传统 GDI 后端无法提供的现代功能。以前的后端仍然可用,可以通过将fontengine=gdi 作为参数传递给 QPA 插件来启用。

macOS

  • 已添加对 macOS 15 的支持
  • 添加了对安全区域边距的支持,既支持全屏应用程序中的相机凹槽,也支持内容扩展到标题栏的窗口。
  • 通过显示带有事务的金属层,修复了调整Qt Quick 窗口大小时的闪烁问题。
  • 在调整Qt Quick 窗口大小时启用运行动画。
  • 采用新的 NSCursor API,用于调整窗口框架大小的光标
  • 实施了 NSServicesMenuRequestor 协议,以支持服务菜单和编写工具。

Linux 上的 Wayland 客户端

  • 添加了在 GNOME 上使用的新窗口装饰风格,并使用与 GNOME 相似的样式。
  • 对话框的模态状态现在通过新的xdg-dialog-v1 协议转发给合成器。
  • 显示窗口现在也会请求合成器激活(设置了Qt::WA_ShowWithoutActivating 时除外)。
  • 已为 qtwaylandscanner 添加支持,以便为空值QString 发送空值。
  • qt6_generate_wayland_protocol_client_sources添加了PUBLIC_CODEPRIVATE_CODE 选项,用于控制传递给wayland-scanner 的选项。
  • Qt Multimedia 中通过 XDG 桌面门户使用 ScreenCast 服务实现了屏幕捕获功能。

移动平台

安卓

  • 将最低支持版本提升至 Android 9。
  • 添加了 build.gradle 命名空间属性支持。
  • 添加了 CMake 属性QT_ANDROID_PACKAGE_NAME,用于设置软件包名称。
  • 将 Gradle 更新至 8.10,将 AGP 更新至 8.6.0。
  • 添加了对构建 AAR 库包的支持。
  • 废弃了Qt Multimedia 中的原生 Android 后端。
  • 使用QLibrary 打开库时,不再默认调用 JNI_OnLoad。
  • QtQuickView和 QML 嵌入:
    • 为 QtQuickView API 添加了强类型支持。
    • 添加了管理 QML 内容的 API,在此基础上,QtQuickView 下的 Java 类被移到了自己的类中。这包括
      • 将 QtQuickView.SignalListener 移至 QtSignalListener。
      • QtQuickView.StatusChangeListener 移至 QtQmlStatusChangeListener。
      • QtQuickView Status 到 QtQmlStatus。
    • 已添加 Java 类 QtAbstractItemModel、QtAbstractListModel 和 QtModelIndex,它们分别封装了QAbstractItemModelQAbstractListModelQModelIndex
    • 已添加对从服务嵌入 QML 的支持。

iOS

  • 已添加对 iOS 18 的支持
  • 修正了通过QScreen::orientation() 错误报告 UIDevice.currentDevice.orientation 的问题。
  • 改进了无障碍集成。

视觉操作系统

  • 添加了对 visionOS 的初步支持。

嵌入式平台

QNX

  • 作为技术预览版添加了对 QNX 8.0 的支持。
  • QNX 8.0 不支持多媒体,请使用-skip qtmultimedia 进行配置。

VxWorks

  • 已添加 VxWorks 24.03 支持。

Boot to Qt

  • 添加了对 Yocto 5.0 (Scarthgap) 的支持。
  • 更新了 "目标硬件支持级别",新增了 1 级支持的板卡:
    • Raspberry Pi 5。
  • 目标硬件支持级别更新了第 2 级新支持的板卡:
    • 英伟达 Jetson AGX Orin 开发套件(从第 3 级升级)。
    • Raspberry Pi 4 64 位(从第 1 级降级)。
  • 目标硬件支持级别已更新,新增了第 3 级支持的板卡:
    • NXP i.MX95(通过Qt 客户门户实验)。
    • Toradex i.MX 95 Verdin 评估套件(通过Qt 客户门户网站测试)。
    • StarFive VisionFive 2。
    • STM32MP15 评估(从 2 级降级)。
    • NXP i.MX 8MQuad 评估套件(从 2 级降级)。

API 变更列表

这些页面概述了 Qt 6.8 中的 API 变化:

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.