Qt 6.9 的新功能
Qt 6.9 的新功能
Qt Core 模块
- QString::arg() 现支持 UTF-8 (QUtf8StringView) 和QAnyStringView 参数。将 C 字符串字面量或 QByteArray 传递给arg() 时,不再会先隐式转换为QString 。
- QAnyStringView 此外,QUtf8StringView 现在也拥有 (多)arg() 函数,就像QStringView 和QLatin1StringView 之前已经具备的那样。这些函数还支持QUtf8StringView 和QAnyStringView 参数,与QString 版本一致。
- QJniArray 现在可以创建固定大小的空数组,并使用非 const 迭代器修改数组中的值,或者operator[]
- QLocale::uiLanguages() 现包含通过移除名称后缀获得的回退条目。此前自行进行此类截断操作的调用者,现在建议信任QLocale 能够正确识别应尝试的选项及其尝试顺序。
- QLocale::bcp47Name() 现将 C 语言区域设置表示为 "en-POSIX",以区别于普通的 "en",并更好地符合 BCP47 规范。同样地,当根据名称构建区域设置时,变体 POSIX 现也被识别为表示 C 语言区域设置。
- QTimeZone::abbreviation() 在 Windows 上现在返回的是缩写形式,而非全称。
- QTimeZone::displayName() 现应在所有平台上为时区提供符合区域设置的名称,而此前某些平台不支持此功能。
- 将包含时区部分的时间戳字符串转换为QDateTime 时,现在可识别时区的长格式显示名称。
- QMetaEnum QFlags 现可支持最多 64 位的类型。
- QJsonValue 现在可以直接使用 `fromJson ` 和 `toJson ` 解析和序列化 JSON,而无需通过 `QJsonDocument`。这使其能够解析和序列化字符串或数字等基本值以及复合值。
- QThread 新增了通过新函数setServiceLevel 设置操作系统线程服务质量提示的功能。
- QThreadPool 还可以使用setServiceLevel 为其线程设置服务质量级别。
- QFile::supportsMoveToTrash() 报告当前操作系统上是否实现了QFile::moveToTrash()。
- QIODevice::readLineInto() 允许将一行数据读入预分配的缓冲区。
- 使用新的Q_STATIC_LOGGING_CATEGORY 宏来声明仅在单个翻译单元中使用的日志记录类别。
- 调用新的QSortFilterProxyModel::beginFilterChange() 方法,以确保正确识别过滤内容的更改。
- QTimerEvent::matches() 使测试定时器事件是否属于特定的QBasicTimer 变得更加容易。
- QUuid::createUuidV7() 允许根据RFC9562 创建唯一标识符。
- QCommandLineParser::showMessageAndExit() 提供了一种便捷的方式,可在应用程序退出前向用户显示信息或错误消息。
- QHash 新增了tryEmplace 和insertOrAssign API,以匹配标准库中的相应 API。
- QSpan 现在可以处理chop 和slice 可变大小的跨度。
Qt Graphs 模块
- 为 Surface3D 添加了透明度支持,利用了QtQuick3D 中的顺序无关透明度。到目前为止,QtQuick3D 仅实现了近似技术(WeightedBlended),因此尚无法使用精确技术。
- 添加了rootNode ,以便在QtQuick3D 应用程序中向View3D 注入图。
- 新增了另一种选择方法doRayPicking ,用于配合View3D 图的注入。
- 新增了QSpline3DSeries 类,允许用户以样条曲线形式呈现数据。
- 在 Bars3D 中添加了valueColoringEnabled 属性,允许根据每个条形图的数值分别为其着色。
- 在 QAbstract3DAxis 中添加了scaleLabelsByCount 属性,允许用户定义轴标签是否应根据标签总数进行缩放。
- 在 QAbstract3DAxis 中添加了labelSize 属性,允许用户按每个坐标轴设置坐标轴标签的大小。
- 为 Bars3D、Scatter3D 和 Surface3D 增加了对设置 X 和 Y 方向最小及最大旋转角度的支持。
- 在 QAbstractAxis 中添加了alignment 属性,允许用户将坐标轴对齐到左侧、右侧、顶部或底部。
- 在 QGraphsView 中添加了
plotArea属性,允许用户定义绘制图形的矩形区域。 - 为 QGraphsView 添加了缩放和平移支持。
- 为面积图、折线图、饼图和散点图添加了自定义输入处理支持。
Qt GRPC 模块
- 添加了《Qt GRPC 客户指南》概述示例。
- 改进并完善了所有文档和示例。
- 优化了高负载下的流式 RPC 写入操作。
Qt GUI 模块
- QBrush 和QPen 获得了用于与颜色和样式值进行比较或从其进行赋值的优化运算符。
- QPainter::setBrush() 获得了新的优化重载,用于将颜色设置为纯色画笔。
- QPainterStateGuard 是一个新的 RAII 类,用于确保对QPainter 进行平衡的保存/恢复操作。
- QColorSpace 新增了用于设置和获取四种主色空间点的 API。
- 添加了Qt::ExpandedClientAreaHint ,用于请求将窗口的客户端区域扩展到可能被其他 UI 元素(如窗口标题栏控件或其他系统 UI)遮挡或与其冲突的区域。
- 添加了 `Qt::NoTitleBarBackgroundHint ` 方法,用于请求将窗口的标题栏绘制为无背景色。
- 添加了 `QWindow::safeAreaMargins()` 方法,用于反映窗口的安全区域。
- 新增了对文本中表情符号序列的解析和自动检测功能,确保根据 Unicode 规范在需要时使用彩色字体。可以通过QTextOption::DisableEmojiParsing 针对每个布局禁用此解析器,或者在配置 Qt XML 时禁用表情符号分割器。
- 添加了QFontDatabase::addApplicationEmojiFontFamily() 及相关函数,用于自定义应用程序使用的默认表情符号字体。
- 新增了QFontInfo::variableAxes() 函数,用于获取字体支持的可变轴信息。
- QImage::flipped() 和QImage::flip() 提供了一个基于 `Qt::Orientation ` 的 API 来翻转图像,其代码比基于 `bool` 的QImage::mirrored() 更易于阅读。
- QRhi:在支持该功能的移动 GPU 上运行 OpenGL ES 时,系统会在可能的情况下使用 GL_EXT_multisampled_render_to_texture。对于Qt Quick 和Qt Quick 3D 等客户端,这在基于瓦片式架构的 GPU 上进行多采样渲染时,可能带来显著的性能提升。
- QRhi: 在运行 Direct 3D 11 和 12 的 Windows 系统上,QWindow 的更新请求现由一个专用的垂直空白监视线程驱动,从而降低了 CPU 负载和延迟。这意味着像Qt Quick 这样的客户端,在通过鼠标或触摸等方式交互式拖动项目时,预计延迟会有所减少。
- QRhi: 在适用情况下(Direct 3D 12、Vulkan、Metal),新增了对可变速率着色的支持。这使得 visionOS 上的Qt Quick 3D XR 能够支持动态视锥体渲染。
- QRhi: OpenGL 现也可选支持按渲染目标进行混合。
- QRhi: 增加了对多种整数和深度纹理格式的支持。
- QRhi: 在 Vulkan 环境下,新增了对传递应用程序提供的等待/信号信号量的支持。这些信号量随后将传递给 vkQueueSubmit 和 Present 函数,从而允许集成依赖多线程并需要与场景图渲染器进行适当同步的外部渲染/计算引擎。
- 使用QPdfWriter::author()属性设置生成的PDF文档的作者。
Qt HttpServer 模块
- QHttpServer 现可通过QHttpServerConfiguration 和configuration 属性进行配置。目前,该功能支持设置rateLimitPerSecond 。
Qt Multimedia 模块
- 新增了VideoOutput::endOfStreamPolicy 和Video::endOfStreamPolicy 属性,允许应用程序在视频流结束时将最后一帧保留在输出中。
- 添加了VideoOutput::mirrored 和Video::mirrored 属性,允许应用程序在视频流结束时保留输出中的最后一个帧。
Qt Network 模块
- 添加了setMaxConcurrentStreams ,用于控制 SETTINGS_MAX_CONCURRENT_STREAMS HTTP/2 设置。
Qt Network 身份验证模块
- 新增了QOAuth2DeviceAuthorizationFlow ,实现了 RFC 8628 中规定的设备授权授予机制。
- 添加了令牌刷新便捷支持。请参阅QAbstractOAuth2::autoRefresh 、QAbstractOAuth2::refreshLeadTime 和QAbstractOAuth2::accessTokenAboutToExpire()。
- 简化了使用系统浏览器以外的用户代理的操作。参见QOAuthUriSchemeReplyHandler::handleAuthorizationRedirect()。
- 添加了QAbstractOAuth2::requestedScopeTokens 和QAbstractOAuth2::grantedScopeTokens 属性,以简化对“请求范围”与“授予范围”的区分。
- 为QOAuthHttpServerReplyHandler 添加了 HTTPS 支持。参见QOAuthHttpServerReplyHandler::listen(const QSslConfiguration&, const QHostAddress&, quint16)。
- 新增了QOAuthHttpServerReplyHandler::setCallbackHost(),允许自定义重定向 URI 中的主机名部分。
- 新增了QAbstractOAuth2::setNetworkRequestModifier() 方法,支持在发送前修改网络请求。
- 改进了对获取OpenID ConnectID 令牌的支持。参见QAbstractOAuth2::idToken 、QAbstractOAuth2::nonce 和QAbstractOAuth2::nonceMode 。
- 新增了QAbstractOAuth2::serverReportedErrorOccurred() 信号,该信号已废弃之前的QAbstractOAuth2::error() 信号。新信号名称明确表明,这些错误特指 RFC 6749 中定义的情况,而非一般性错误。
Qt Protobuf 模块
- 改进并完善了所有文档。
- 添加了
HEADER_GUARD选项,用于指定保护生成的头文件所使用的机制。 - 新增了
protobuf-unsafe-registry功能,可在访问自定义 Protobuf 序列化器时,在安全性与性能之间进行权衡。
Qt Qml 模块
- QML Language Server 现在提供了文档结构的大纲视图。这允许客户端(例如 IDE 或代码编辑器)将 QML 文档的结构表示为交互式大纲,并在分层视图中显示对象、属性、方法和其他代码元素。
- qmlformat 添加了最大行长功能:qmlformat 现在可以根据允许的最大行长控制换行位置,从而确保 QML 文档的一致性和可读性。
Qt Quick 模块
- 添加了SafeArea 附加属性,用于管理 Item 或 Window 的安全区域。
- 添加了 Shear 组件,以便于对项目应用剪切变换。
- 添加了FontMetrics::capitalHeight 属性,该属性此前在Qt Quick API中缺失。
- 新增了FontInfo 类型,用于检索字体解析结果,与C++中的QFontInfo 类相对应。
- 当使用的图形 API 为 OpenGL 时,重新引入了对QQuickPaintedItem 的 FramebufferObject 渲染模式的支持。此功能旨在为需要使用QPainter 传统 OpenGL 绘制引擎来处理其 QQuickPaintedItems 的 Qt 5 时代应用程序提供移植辅助。
- 优化了场景图渲染器的缓冲区池化逻辑,以防止在包含大型几何体的场景中出现内存使用量激增的情况。此外,对于包含大量项的场景,其开销也得到了降低,特别是在使用 OpenGL 运行时。
Qt Quick Controls 模块
- 新增了ContextMenu 。该组件可附加到任何项上,以便在发生特定于平台的事件(如右键单击或按下上下文菜单键)时显示上下文菜单。
- TextField 此外,TextArea 现在默认提供ContextMenu 。若您已为这些类型设置了自定义上下文菜单,则ContextMenu 不会在右键单击或按下上下文菜单键时打开其自身的菜单。
Qt Quick Effects 模块
- 新增RectangularShadow 元素,用于快速生成圆角矩形阴影/光晕效果。其API与CSS的box-shadow类似,包含颜色、偏移、扩散和模糊等属性。
Qt Quick 3D 模块
- 新增了用于渲染透明对象的加权混合顺序无关透明度(OIT)实现。
- 新增对 32 位无符号整数纹理格式的支持。
- 改进了对实例化模型阴影贴图边界的控制,当计算成本较高时,这可能带来更好的性能。
- 新增对 4K 阴影贴图的支持,并引入了新的“Ultra”分辨率设置。
- 新增了在 GLSL ES 片段着色器中强制浮点数使用中精度(medium precision)的选项。该选项主要作为性能调优工具提供。 将环境变量 QT_QUICK3D_MEDIUM_PRECISION 设置为非零值。对其他类型的着色器(包括非 ES 标准的 GLSL)没有影响。
- DebugView 现支持可视化点光源阴影的边界。
- 将内置几何体从Qt 3D 移植到了QtQuick3D.Helpers。现在,QtQuick3D.Helpers 中已提供 PlaneGeometry、SphereGeometry、CylinderGeometry、ConeGeometry 和 TorusGeometry。
- 将Qt 3D 中的 ExtrudedTextMesh 移植到了QtQuick3D.Helpers 中。
- 在材质编辑器中增加了对自定义材质实例化的支持。
Qt Quick 3D XR 模块
- 通过XrHapticFeedback 中的新项,新增了对使用振幅、持续时间和频率的控制器进行触觉输出的支持。
- 在XrInputAction 中添加了新属性,可在无需在所有处理函数中进行检测的情况下,有条件地禁用某个动作。
- 为 OpenXR 添加了 Metal 后端,以支持在 macOS 上的 Meta XR Simulator 中运行。
- multiViewRenderingEnabled 属性现为只读,且无法在运行时切换多视图渲染。如果支持多视图渲染,则在应用程序生命周期内始终启用该功能。 在移植场景中,若不需要多视图渲染,可通过将环境变量 QT_QUICK3D_XR_DISABLE_MULTIVIEW 设置为非零值来禁用该功能。
Qt Quick VectorImage 模块
- 新增了对颜色动画和变换动画的初步支持,与 Qt SVG 中的当前支持功能保持一致。
Qt SQL 模块
- QSqlDriver 新增了函数 `connectionName()`,该函数返回关联的 `QSqlDatabase ` 实例的连接名称。
- QSqlQueryModel 现在,当数据库在 Qt 外部被修改而需要重新读取时,可以使用refresh() 刷新数据库。
Qt SVG 模块
- 在QtSvg::Options 中添加了三个新值,用于禁用动画。
- 支持 fill、stroke 和 transform 属性的 CSS 动画。
Qt VirtualKeyboard 模块
- 新增了一个使用轻扫键的日语布局。
- 增加了对调整按键声音音量的支持。
Qt WebEngine 模块
- 已将内部渲染切换为使用 ANGLE,即使在 Qt 使用 OpenGL RHI 时也是如此。提高了性能,并使错误表现与 Chrome 更相似。
- QWebEngineProfileBuilder 并为 QMLWebEngineProfilePrototype 添加了在创建配置文件前先对其进行配置的功能,从而避免了竞争条件。
- QWebEngineLoadingInfo 添加了isDownload 属性,用于指示加载与下载有关。
- QWebEngineUrlRequestInfo 还添加了isDownload() 方法,用于指示请求与下载相关。
- QWebEngineSettings 此外,QMLWebEngineSettings 增加了三个新设置:PrintHeaderAndFooter 和 PreferCSSMarginsForPrinting 用于配置打印功能;TouchEventsApiEnabled 用于禁用 TouchEvents API(某些网站将其用作移动模式的触发条件)。
Qt Widgets Module
- QAbstractItemView 新增了updateThreshold 属性,用于指定何时应执行完整视图更新,而非在dataChanged()中尝试确定发生变化的部分。当大型模型中大量项发生变化时,此功能尤为有用,因为更新矩形(update rect)的计算可能比完整视图更新耗时更长。
- QComboBox 可以通过将labelDrawingMode 属性设置为UseDelegate ,利用项目视图的委托来绘制其标签。
- QHeaderView 已针对大型模型进行了优化,只要未对分区进行调整大小、隐藏或重新排序,即可大幅降低内存占用。
- 作为QWidget::accessibleIdentifier 设置的标识符可被辅助技术和自动化测试工具用于识别特定的控件。
- QDockWidget 的停靠位置无法通过QDockWidget::dockLocation 属性显式设置。
- QStackedWidget 现在,当新小部件被添加到堆栈中时,会发出widgetAdded()信号。
Qt XML 模块
- QDomNodeList 获得了一个iterator API 。
工具
QDoc 文档生成器
- QDoc 现在接受宏参数中的格式化命令。
- 作者现在可以使用 `
auto` 覆盖通过 `fn`命令进行文档记录的函数的底层返回类型。 - QDoc 现在可以从 C++ 头文件中的注释生成文档。此功能作为技术预览版已随 Qt 6.9 添加到 QDoc 中,我们非常期待收到用户的反馈。请启用 QDoc 配置变量 `documentationinheaders` 来尝试此功能。
- 现在可以使用新的 `qmlenumeratorsfrom` 命令,从 C++ 枚举类型生成 QML 枚举文档。
- generatelist和annotatedlist命令现在支持为生成的列表设置自定义排序顺序。
- `deprecated` 支持未来版本,当 QDoc 识别出某个版本属于未来版本时,会生成相应的文本。
- Clang 库要求:QDoc 需要 LLVM 17 版本的 Clang 库。同时已确认其可与 LLVM 18、19 和 20 版本的 Clang 库兼容。
- QDoc 现支持通过 `cmakecomponent`、`cmakepackage` 和`cmaketargetitem` 命令调整第三方项目的 CMake 依赖项。
- 现在可以通过新的配置变量 `examples.warnaboutmissingimages` 和`examples.warnaboutmissingprojectfiles` 来配置与示例相关的警告。
- QDoc 现可为文档中的图片生成工具提示。关于新配置变量 `usealttextastitle` 的文档介绍了如何在项目中启用此功能。
平台变更
构建系统变更
- 现在,在 CMake 项目中构建 Qt 和使用 Qt 需要 CMake 3.22 或更高版本。
桌面平台
Windows
- 新增了公共 CMake API:
- 新增了qt_add_win_app_sdkCMake 函数,用于将 Windows App SDK 添加到项目中。
- 新增对更多表情符号字体格式的渲染支持,例如 CBDT 和 COLRv1。
Linux 上的 Wayland 客户端
- 新增对新
xdg-toplevel-icon-v1协议的支持,以便在合成器也支持该协议时,QWindow::setIcon()能正常工作。 - 窗口底层的
wl_surface现与其生命周期绑定,当窗口被隐藏时,该 不再被销毁。
移动平台
Android
- 支持 APK 中的未压缩本机库,并消除了对
packagingOptions.jniLibs.useLegacyPackaging true的需求。 - 引入qt_add_android_permission() CMake 函数。
- 添加QT_ANDROID_COMPILE_SDK_VERSIONCMake 属性,用于设置构建 Java 代码的 SDK 级别。
- 添加QT_ANDROID_APP_ICONCMake 属性,用于设置应用图标。
- 添加QT_ANDROID_APP_NAMECMake 属性,用于设置应用名称。
- 将 API 级别 31 及以上版本的位置和蓝牙权限解耦。
- 允许设置后台 UI 事件队列的最大数量。
- 添加脚本,以便通过终端轻松部署、运行应用并获取日志。
- Qt Quick 针对 Android和QtQuickView:
- 在QtAbstractItemModel 中添加 setData() 和 dataChanged() 方法。
- 添加 OnDataChangedListener 回调接口。
- QtQuickViewContent:添加 onStatusChanged() 重载方法,该方法会传递底层的 QtQuickViewContent 对象。
- 支持从 Android 服务中嵌套多个视图。
嵌入式平台
Boot to Qt
- 已添加对 Yocto 5.1(Styhead)的支持。
- 目标硬件的支持级别已更新,Tier 1 新增了以下支持的开发板:
- NVIDIA Jetson AGX Orin 开发套件(Boot to Qt,从第 2 级升级而来)。
- 已更新目标硬件支持级别,新增了二级支持的开发板:
- Toradex Apalis iMX6(Boot to Qt,从第1级降级)。
- 目标硬件支持级别已更新,新增了第 3 级支持的开发板:
- Qualcomm RB3 Gen 2 视觉开发套件 (Boot to Qt)。
- NXP i.MX 8M Mini LPDDR4 EVK(Boot to Qt,从第2级降级)。
- NXP i.MX 8M Nano LPDDR4 评估开发板 (Boot to Qt,从第2级降级而来)。
- NXP i.MX 8M Plus LPDDR4 评估套件 (Boot to Qt,从第2级降级)。
- 以下开发板不再受支持:
- NVIDIA Jetson AGX Xavier 开发套件 (Boot to Qt)。
- Amazon AWS EC2 ARM64 (Boot to Qt)。
- TI SK-AM69 (Boot to Qt)。
- NXP i.MX 8MQuad 评估板 (Boot to Qt)。
- NXP i.MX 8QuadXPlus MEK (Boot to Qt)。
- 高通机器人 RB5 开发套件 (Boot to Qt)。
实时操作系统
- 仅对 LTS 版本提供实时操作系统支持。对于非 LTS 版本,支持仅通过专业服务提供。
API 变更列表
这些页面概述了 Qt 6.9 中的 API 变更:
© 2026 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.