Qt 6.9 中的新功能
Qt 6.9 中的新功能
Qt Core 模块
- QString::arg() 现在支持 UTF-8 (QUtf8StringView) 和QAnyStringView 参数。向arg() 传递 C 字符串字面量或 QByteArrays 现在不再首先隐式转换为QString 。
- QAnyStringView 和 现在有了(多) () ,就像 和 已经有的那样。与 版本一样,它们也支持 和 参数。QUtf8StringViewarg QStringView QLatin1StringView QString QUtf8StringView QAnyStringView
- QJniArray 现在可以创建一个固定大小的空数组,并使用非const 迭代器或operator[]
- QLocale::uiLanguages()现在包含了通过移除名称后面的成分而获得的回退条目。现在,我们鼓励调用者自己进行此类截断操作,相信QLocale 知道应该尝试哪些正确的操作,以及尝试的正确顺序。
- QLocale::bcp47Name()现在用 "en-POSIX "来表示 C 语言的区域设置,以区别于普通的 "en",并更好地与 BCP47 规范保持一致。同样,在根据名称构造 C 语言区位时,变体 POSIX 现在也被识别为 C 语言区位。
- QTimeZone::abbreviation现在,Windows 上的 () 返回的是缩写而不是全名。
- QTimeZone::displayName() 现在可以为所有平台上的区提供适合本地的名称,而以前有些平台则不支持。
- 将带有时区部分的时间戳字符串转换为QDateTime 时,现在可以识别长格式的区显示名称。
- QMetaEnum 和 现在可以支持多达 64 位的类型。QFlags
- QJsonValue 现在可以直接使用 和 对 JSON 进行解析和序列化,而无需通过 。这样就能解析和序列化字符串或数字等原始值以及复合值。fromJson toJson 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 和 API 与标准库中的相应 API 相匹配。insertOrAssign
- 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() 更易于阅读。
- QRhiGL_EXT_multisampled_render_to_texture:在支持 OpenGL ES 的移动 GPU 上运行时,尽可能使用 GL_EXT_multisampled_render_to_texture。对于Qt Quick 和Qt Quick 3D 等客户端来说,这可能会显著提高在平铺 GPU 架构上进行多采样渲染的性能。
- QRhi:在使用 Direct 3D 11 和 12 的 Windows 系统中,QWindow 更新请求现在由专用的 vblank 观察线程驱动,从而减少了 CPU 负载和延迟。这意味着Qt Quick 等客户端在使用鼠标或触摸进行交互式拖动项目时有望减少延迟。
- QRhi:在适用的情况下添加了对可变速率着色的支持(Direct 3D 12、Vulkan、Metal)。这样就能在 visionOS 上使用Qt Quick 3D XR 支持动态眼动。
- QRhi:现在 OpenGL 也可选择支持每渲染器目标混合。
- QRhi:新增了对多种整数和深度纹理格式的支持。
- QRhi:在使用 Vulkan 时,新增了对传递应用程序提供的等待/信号 semaphores 的支持。这些信号会传递给 vkQueueSubmit 和 Present,从而允许集成依赖多线程并需要与场景图渲染器适当同步的外部渲染/计算引擎。
- 使用QPdfWriter::author() 属性设置生成的 PDF 文档的作者。
Qt HttpServer 模块
- QHttpServer 现在可以通过 和 属性进行配置。目前,它支持设置 。QHttpServerConfiguration configuration rateLimitPerSecond
Qt Multimedia 模块
- 已添加VideoOutput::endOfStreamPolicy 和Video::endOfStreamPolicy 属性,允许应用程序在视频流结束时在输出中保留最后一帧。
- 已添加VideoOutput::mirrored 和Video::mirrored 属性,允许应用程序围绕 Y 轴翻转显示的视频。
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 现在可提供文档结构的大纲视图。这允许客户端(如集成开发环境或代码编辑器)将 qml 文档的结构表示为交互式大纲,在分层视图中显示对象、属性、方法和其他代码元素。
- 为 qmlformat 添加了最大行长功能:现在,qmlformat 可根据允许的最大行长来控制断行位置,从而确保 QML 文档的一致性和可读性。
Qt Quick 模块
- 添加了SafeArea 附加属性,用于管理项目或窗口的安全区域。
- 添加了剪切组件,可方便地对项目应用剪切变换。
- 已添加FontMetrics::capitalHeight 属性,该属性以前在Qt Quick API 中缺失。
- 添加了FontInfo 类型,用于检索字体分辨率的结果,与 C++ 中的QFontInfo 类相匹配。
- 当使用的图形 API 是 OpenGL 时,重新引入了对QQuickPaintedItem 的 FramebufferObject 渲染模式的支持。这是作为 Qt 5 时代应用程序的移植辅助工具提供的,这些应用程序需要在其 QQuickPaintedItems 中使用QPainter 的传统 OpenGL 绘画引擎。
- 优化了场景图渲染器的缓冲池逻辑,以防止在具有大型几何图形的场景中出现内存使用高峰。此外,还减少了有大量项目的场景的开销,尤其是在使用 OpenGL 运行时。
Qt Quick Controls 模块
- 添加了ContextMenu 。该模块可附加到任何项目,以便在特定平台事件(如右键或上下文菜单键)发生时显示上下文菜单。
- TextField 和 现在默认提供 。如果已为这些类型自定义了上下文菜单, 将不会打开自己的上下文菜单(在右键单击或上下文菜单按键时)。TextArea ContextMenu ContextMenu
Qt Quick 效果模块
- 新增RectangularShadow 元素,用于快速显示圆角矩形阴影/光晕。API 与 CSS 框阴影类似,具有颜色、偏移、扩散和模糊值。
Qt Quick 3D 模块
- 添加了加权混合阶独立透明度 (OIT) 实现,用于渲染透明对象。
- 添加了对 32 位无符号整数纹理格式的支持。
- 改进了对实例化模型的阴影贴图边界的控制,当计算变得昂贵时可能会提高性能。
- 通过新的 "超 "分辨率设置,添加了对 4K 阴影贴图的支持。
- 在 GLSL ES 片段着色器中添加了强制使用中等精度浮点数的选项。主要作为性能调整工具提供。将环境变量 QT_QUICK3D_MEDIUM_PRECISION 设置为非零值。这对其他类型的着色器(也包括非 ES GLSL)没有影响。
- DebugView 现在支持可视化点光源阴影的边界。
- 将内置几何图形从Qt 3D 移植到QtQuick3D.Helpers。PlaneGeometry现在,SphereGeometry 、CylinderGeometry 、ConeGeometry 和TorusGeometry 在QtQuick3D.Helpers 中可用。
- 已将ExtrudedTextMesh 从Qt 3D 移植到QtQuick3D.Helpers。
- 在材质编辑器中添加了对自定义材质使用实例化的支持。
Qt Quick 3D XR 模块
- 通过新的XrHapticFeedback 项目,使用振幅、持续时间和频率为控制器的触觉输出添加了支持。
- 在XrInputAction 中添加了新属性,以便有条件地禁用动作,而无需在所有处理程序函数中进行测试。
- 为 OpenXR 添加了 Metal 后端,以支持在 macOS 上的 Meta XR 模拟器中运行。
- multiViewRenderingEnabled 属性现在是只读属性,运行时不再可能切换多视图渲染。如果支持多视图呈现,则会在应用程序的整个生命周期内启用。在不需要多视图呈现的移植情况下,可通过将环境变量 QT_QUICK3D_XR_DISABLE_MULTIVIEW 设置为非零值来禁用多视图呈现。
Qt Quick 矢量图像模块
- 新增了对色彩动画和变换动画的初步支持,与 Qt SVG 中的当前支持相匹配。
Qt SQL 模块
- QSqlDriver 获得了一个新函数 () ,该函数返回相关 实例的连接名称。connectionName QSqlDatabase
- QSqlQueryModel 现在可以使用 () 刷新数据库,例如,当数据库从 Qt XML 外部修改,因此需要重新读取时。refresh
Qt SVG 模块
- 为QtSvg::Options 添加了三个新值,用于禁用动画。
- 支持填充、描边和变换属性的 CSS 动画。
Qt 虚拟键盘模块
- 添加了使用轻触键的新日文布局。
- 已添加对调整按键音量的支持。
Qt WebEngine 模块
- 已将内部渲染切换为使用 ANGLE,在 Qt 使用 OpenGL RHI 时也是如此。提高了性能,并改进了与 Chrome 浏览器相似的错误。
- QWebEngineProfileBuilder 和 QML Profiler 添加了在创建配置文件前配置配置文件和避免竞赛条件的功能。WebEngineProfilePrototype
- QWebEngineLoadingInfo 添加了 属性,用于指示加载与下载相关。isDownload
- QWebEngineUrlRequestInfo 还添加了 () 方法,以指示请求与下载有关。isDownload
- QWebEngineSettings 和 QML 添加了三个新设置。PrintHeaderAndFooter 和 PreferCSSMarginsForPrinting 用于配置打印。TouchEventsApiEnabled 用于关闭 TouchEvents API,某些网站将其用作移动模式的触发器。WebEngineSettings
Qt Widgets 模块
- QAbstractItemView 获得了一个新属性 ,用于指定何时进行全视图更新,而不是试图找出 dataChanged() 中发生变化的部分。当大型模型中的大量项目发生变化时,这一点尤其有用,因为更新矩形计算可能比全视图更新耗时更长。updateThreshold
- QComboBox 通过将 属性设置为 ,可以使用项目视图的委托来绘制标签。labelDrawingMode UseDelegate
- QHeaderView 只要不调整各部分的大小、隐藏或重新排序,"...... "已进行了优化,可显著减少大型模型的内存使用量。
- 辅助技术和自动测试工具可以使用设置为QWidget::accessibleIdentifier 的标识符来识别特定的部件。
- QDockWidget 的停靠位置不能通过QDockWidget::dockLocation 属性明确设置。
- QStackedWidget 现在,当一个新的 widget 被添加到堆栈时,会发出 () 信号。widgetAdded
Qt XML 模块
- QDomNodeList 获得了一个 。iterator API
工具
QDoc 文档生成器
- QDoc 现在可接受宏参数中的格式化命令。
- 作者现在可以通过
auto
重写用fn-command 文档化的函数的底层返回类型。 - QDoc 现在可以从 C++ 头文件中的注释生成文档。这是作为 Qt 6.9 的技术预览版添加到 QDoc 中的,我们希望得到用户的反馈。启用documentationinheadersQDoc 配置变量即可试用。
- 使用新的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配置变量的文档介绍了如何为您的项目启用该功能。
平台变更
构建系统变更
- 构建 Qt 和在 CMake 项目中使用 Qt 现在需要 CMake 3.22 或更高版本。
桌面平台
视窗
- 已添加对其他表情符号字体格式(如 CBDT 和 COLRv1)的渲染支持。
Linux 上的 Wayland 客户端
- 添加了对新的
xdg-toplevel-icon-v1
协议的支持,如果合成器也支持该协议,则QWindow::setIcon() 可正常工作。 - 窗口的底层
wl_surface
现在共享其生命周期,在窗口隐藏时不再被销毁。
移动平台
安卓
- 支持 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 属性,以设置应用程序的名称。
- 针对 31+ 级 API 将位置和蓝牙权限分离。
- 允许为排队的后台 UI 事件设置最大值。
- 添加脚本以轻松部署、运行应用程序并从终端获取日志。
- Qt Quick 针对 Android和QtQuickView:
- 为QtAbstractItemModel 添加 setData() 和 dataChanged() 方法。
- 添加 OnDataChangedListerner 回调接口。
- QtQuickViewContent:添加传递底层 QtQuickViewContent 对象的 onStatusChanged() 重载。
- 支持来自 Android 服务的多个嵌入式视图。
嵌入式平台
Boot to Qt
- 新增对 Yocto 5.1 (Styhead) 的支持。
- 目标硬件支持级别已更新,新增了第 1 级支持的板卡:
- NVIDIA Jetson AGX Orin 开发者工具包 (Boot to Qt,从第 2 级升级)。
- 目标硬件支持级别更新了第 2 级的新支持板卡:
- Toradex Apalis iMX6 (Boot to Qt,从第 1 级降级)。
- 目标硬件支持级别更新了第 3 级的新支持板卡:
- 高通 RB3 第 2 代视觉套件 (Boot to Qt).
- NXP i.MX 8M Mini LPDDR4 EVK ( )。Boot to Qt,从第 2 级降级)。
- NXP i.MX 8M Nano LPDDR4 EVK ( )。Boot to Qt,从第 2 级降级)。
- NXP i.MX 8M Plus LPDDR4 EVK(Boot to Qt,从第 2 级降级)。
- 不再支持以下板卡:
- NVIDIA Jetson AGX Xavier Developer Kit(Boot to Qt).
- 亚马逊 AWS EC2 ARM64 ( )。Boot to Qt).
- TI SK-AM69 ( )Boot to Qt).
- NXP i.MX 8MQuad EVK ( ).Boot to Qt).
- NXP i.MX 8QuadXPlus MEK ( ).Boot to Qt).
- 高通机器人 RB5 开发套件 ( ).Boot to Qt).
实时操作系统
- 实时操作系统支持仅适用于 LTS 版本。对于非 LTS 版本,仅通过专业服务提供支持。
API 更改列表
这些页面概述了 Qt 6.9 中的 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.