本页内容

Qt 6.12 的新功能

Qt 6.12 中的新增和恢复模块

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

  • Qt Qml 设计支持模块,包含用于在QML中注册和引用对象的一组类型。该模块旨在为未来的Qt Quick 设计工具提供支持。

Qt 6.12 的新功能

ActiveQt 模块

无显著变更。

Qt Bluetooth 模块

Qt Canvas Painter 模块

Qt CoAP 模块

无值得注意的变化。

Qt Core 模块

Qt D-Bus 模块

无值得注意的变更。

Qt Graphs 模块

Qt GRPC 模块

Qt GUI 模块

Qt HTTP Server 模块

Qt Image Formats 模块

没有值得注意的变化。

Qt Lottie Animation 模块

Qt MQTT 模块

没有值得注意的变化。

Qt Multimedia 模块

Qt Network 模块

Qt Network 授权模块

没有值得注意的变化。

Qt OPC UA 模块

没有值得注意的变化。

Qt OpenAPI 模块

  • qt_add_openapi_client()新增了GENERATE_DOCUMENTATION 、DOCUMENTATION_OUTPUT_DIRECTORY 选项,用于在生成客户端代码的同时生成基于 Doxygen 的文档。
  • 增加了对oneOf模式特性的支持。
  • 重命名了生成的模型属性获取器。Q_PROPERTY 现在公开的属性名称与 YAML 文件中使用的名称一致。
  • 生成的客户端 API 方法不再是虚拟方法。

Qt Positioning 模块

Qt Print Support 模块

无值得注意的更改。

Qt Protobuf 模块

  • 生成的消息类中的 Qt 属性现在默认标有FINAL 修饰符。这使得 QML 工具能够应用性能优化并生成更高效的代码。若要恢复旧行为,请使用qt_add_protobuf()的新选项GENERATE_NON_FINAL_PROPERTIES 。

Qt Qml 模块

Qt Quick 模块

Qt Quick Controls 模块

  • 添加了QtQuick.Controls.Native 样式。import QtQuick.Controls.Native 会在编译时为目标平台选择最合适的样式。因此,它既结合了编译时样式选择的优势,又使应用程序能够呈现出特定于平台的外观和感觉。
  • ToolTip 新增了policy 属性,用于控制自动工具提示的可见性。
  • ComboBox 新增了highlightOnHover 属性。
  • RangeSlider 新增了 `crossingEnabled ` 属性,用于允许或禁止两个控件相互交叉。
  • Menu 新增了separatorsCollapsible 属性。
  • MenuItem 现在会显示来自关联的Action 的键盘快捷键。
  • SearchField 现在,如果其TextInput 为空,则允许使用键盘进行导航。
  • 为了方便起见,SearchField 中添加了现有TextField API的一部分:selectTextByMouse、selectedText、selectionStart、selectionEnd、cursorPosition、select()、selectWord()和deselect()。

Qt Quick Dialogs 模块

没有值得注意的更改。

Qt Quick Effects 模块

没有值得注意的变化。

Qt Quick Test 模块

Qt Quick 3D 模块

Qt Quick 3D XR 模块

  • 新增了对单视图配置的支持(XR_VIEW_CONFIGURATION_TYPE_PRIMARY_MONO ),使Qt Quick 3D XR 应用程序能够在 AR 眼镜等 2D XR 设备上运行。

Qt Quick 3D 物理模块

Qt Remote Objects 模块

Qt SCXML 模块

无值得注意的更改。

Qt Sensors 模块

没有值得注意的更改。

Qt Serial Port 模块

无显著变更。

Qt Spatial Audio 模块

无显著变更。

Qt Serial Bus 模块

无显著变更。

Qt SQL 模块

无显著变更。

Qt SVG 模块

Qt Labs StyleKit 模块

  • 引入了QStyleKitStyle ,这是一个QStyle 的子类,用于为QWidget 应用程序应用基于 StyleKit 的样式。
  • 该样式现已为RoundButton 和MenuSeparator 这两种Qt Quick Controls 类型提供了实现,取代了通用的备用方案。

Qt TaskTree 模块

Qt Test 模块

  • 基准测试结果现在包含不同测量后端(时间、CPU 时钟周期、事件、Valgrind)之间的方差和标准差。
  • 为了保持一致性,纯文本基准测试记录器现在使用科学记数法对浮点结果进行格式化。
  • 当命令行中同时指定了有效的测试函数和不存在的测试函数时,系统仍会执行有效的测试。

Qt Virtual Keyboard 模块

无显著变更。

Qt WebEngine 模块

  • QWebEngineNavigationRequest 新增了 userInitiated 属性,用于区分用户主动发起的导航与程序化导航。
  • QWebEngineProfile 新增了 setCryptoModulePasswordFunction() 方法,用于提供解锁 PKCS#11 硬件令牌的回调函数。

Qt WebSockets Module

无值得注意的变更。

Qt PDF 模块

  • QPdfSearchModel 新增了 status 属性及 Status 枚举,用于跟踪搜索是否正在进行、处于空闲状态或已完成。
  • QPdfView 现在支持按住 Control 键并滚动鼠标滚轮,以光标位置为中心进行缩放。
  • render() 增加了可选参数,用于指定图像格式和背景颜色。

Qt WebView 模块

  • WebView 现可在 Android、iOS、macOS 和 Windows 系统上从 Qt 资源系统(qrc:/ URL)加载内容。

Qt Widgets 模块

Qt XML 模块

无显著变更。

工具

Qt Assistant

  • Qt Assistant 现在,当启用深色配色方案时,可正确渲染浅色/深色主题的 Qt SVG 图表,其行为与在线 Qt 文档保持一致。

QML 命令行工具

  • 在qmllint中添加了--only-explicit-categories 选项,用于抑制所有默认警告。
  • 在已注册类型的属性和方法中使用的未注册类型,现已在 qmltypes 中作为“opaque”类型进行记录。这避免了工具中的警告,使qmlls 中的自动完成和“转到定义”功能能够正常工作,并使更多地方能够进行与 C++ 的绑定编译。
  • 已将qmllint和qmlls修改为对未知类型仅发出一次警告,而非针对该未知类型的每次绑定和使用都生成警告。
  • 在qmllint和qmlls中新增了以下警告:
    • 被遮蔽的 QML 类型成员。
    • 文件选定变体不兼容(可选功能)。
    • 递归实例化的 QML 类型。
    • 通过文件名而非 qmldir 或QT_QML_SOURCE_TYPENAME 名称引用的 QML 类型。
    • JavaScript 中使用了接受超过 1 个参数的new Array() 重载方法。
  • 在QML Language Server 中新增了以下功能:
    • 通过代码操作将组件封装到加载器中。
    • 查找通过QML_FOREIGN 声明的类型的 C++ 定义。
    • 在后台重建 QML 类型信息时显示进度。

QDoc 文档生成器

  • C++20 概念:新的 \concept topic 命令会为 C++20 概念生成一个专门的参考页面,其中包含受该概念约束的已文档化类型和函数列表。 C++ 语法概要中的概念参考在 HTML 和 DocBook 输出中均会链接至这些页面,而直接受概念约束的模板参数(如template <Integral T> )将显示概念名称,而非 `typename ` 关键字。通过 `.index ` 文件,概念链接可在模块之间生效。
  • enable_if基于 SFINAE 的约束会渲染为易于阅读的 `requires ` 子句,而非晦涩的无名布尔模板参数,这扩展了Qt 6.11 中引入的 C++20 `requires` 子句支持。当函数同时具有显式的 `requires ` 子句时,两者将合并显示。
  • 显式默认化和已删除的函数在其定义摘要中带有[default] 和[delete] 标签,而编译器生成的特殊成员函数则标记为[implicit] 。这些标签会链接到 cppreference.com。对于没有 \fn 代码块,QDoc 会自动生成文档且不发出警告。显式文档将覆盖生成的文本,若将配置变量showautogenerateddocs设置为false ,则会将其从输出中省略。
  • QDoc 会区分“隐藏的朋友函数”(即仅能通过参数依赖查找获得的朋友函数)与仅授予访问权限的朋友声明。请使用其自然的自由函数语法(例如\fn operator==(const MyClass &, const MyClass &) )来文档化隐藏的朋友函数(包括行外定义的),而非使用类限定名。
  • 一个统一的表格取代了由 \compares 和 \compareswith 命令生成的零散比较文档段落,通过统一的表格,一目了然地展示类与哪些类型进行比较,以及每种关系适用哪种比较类别。
  • ` \a 命令现可对模板参数名称进行验证。QDoc 会针对类和类型别名中未记录的模板参数,以及函数中未记录的非类型或模板-模板参数发出警告。
  • 通过在 \preliminary生成的状态描述符和消息,允许使用“技术预览”等术语代替默认值。状态命令的优先级保持一致:\preliminary 会覆盖\modulestate ,而\internal 则同时覆盖这两者。
  • 在\module 或\qmlmodule 主题上设置的状态(例如\preliminary 或\deprecated )会传播到模块的成员,除非某个成员设置了自己的状态。
  • 新的 \qmluncreatabletype topic 命令用于记录已在 QML 类型系统中注册但无法实例化的 QML 类型。QDoc 还会自动检测带有QML_UNCREATABLE 宏注释的类型。
  • 关联属性、信号和方法不仅在“所有成员”页面中,还在主要的 QML 参考页面中进行了标注。
  • “ \qmlmethod 该命令需要完整的签名;当返回类型缺失或参数列表无法解析时,QDoc 会发出警告。
  • 类文档中的#include语句反映了Clang报告的实际头文件名称。使用Qt风格便捷头文件(如<QString> )的项目仍可自动运行。
  • 每个项目在基础输出目录中都会获得一个.index 文件,以取代特定格式子目录中的各格式副本。索引配置变量中的相对路径会根据.qdocconf 文件的位置进行解析,这与其他路径变量保持一致。
  • 生成的 HTML 文件会根据页面类型(类、QML 类型、模块、示例等)自动包含<meta name="keywords"> 条目,从而简化后处理和站点地图的生成。代码块带有与 highlight.js 语法高亮兼容的标签。
  • 文档编写方面的细微改进:使用 \metaqdoc-suppress-inheritance 来隐藏仅出于文档目的而继承基类的类型的“Inherits:”行; \list 支持零及以下起始值;在\l 链接目标中,\# 表示字面量字符# ;以及 \details 强制执行其文档中所述的大括号分隔的摘要参数。
  • 新增了对 LLVM/Clang 22 的兼容性。

Qt Linguist

  • lupdate 现可保留.ts 文件中的现有行结束符。在 Windows 上,行结束符为 CRLF 的文件将就地更新为 CRLF;行结束符为 LF 的文件以及新文件则保留 LF。
  • Qt Linguist 新增了 -web-help 选项,可根据需要使用在线 Web 文档。

Resource Compiler (rcc)

  • rcc现采用基于内容的 SHA256 哈希算法对资源数据进行去重处理。嵌入在 Qt 资源集合中的相同文件仅存储一次,从而在不更改应用程序源代码的情况下,减小了编译后资源的大小。

平台变更

构建系统变更

构建 Qt

  • 现在构建 Qt 需要 CMake 3.25 或更高版本。
  • 新增了static_compiler_runtime CMake 功能,用于静态链接 C++ 运行时库。在 Windows(MSVC)上,该功能采用混合 CRT 方法,从而消除了对 Visual C++ 再分发包的依赖。
  • 为 Android 构建 Qt 时,现在使用 Gradle 代替直接调用javac 来处理 Qt JAR 目标。

CMake API

桌面平台

Windows

  • CMake 项目现在会自动生成并嵌入应用程序清单,用于通过qt_add_executable() 构建的 Windows 可执行文件。该清单声明了 Windows 10/11 兼容性,启用了长路径支持,并配置了 UAC 执行级别。 有两个新的 CMake 目标属性用于控制生成的清单:QT_WINDOWS_APP_PROJECT_IDENTIFIER用于设置程序集标识名,QT_WINDOWS_APP_PROJECT_EXECUTION_LEVEL用于设置执行级别。详情请参阅《Qt for Windows - 部署》。
  • windeployqt新增了--appx 和--appx-certificate 选项,用于生成适合打包为Windows Store appx包的AppxManifest.xml 。
  • QOperatingSystemVersion::Windows11_25H2 (10.0.26200) 已作为命名操作系统版本常量添加。
  • 在 Windows 上,平台插件现在通过ColorProfileGetDisplayDefault 从每个屏幕的 ICC 配置文件中推导出其色彩空间,而不是始终报告 sRGB。
  • DirectWrite 字体后端现在会读取每种字体的 GASP 表,根据字体和点大小选择适当的抗锯齿策略,从而更贴近字体设计者的初衷。
  • 针对当前的英特尔 GPU 驱动程序,重新启用了着色器磁盘缓存。此前数年间,该功能在 Windows 系统的英特尔显卡上一直被无条件禁用;现在改用驱动程序版本检查,从而提升了现代英特尔硬件上Qt Quick 3D 的性能。
  • QWizard 当系统处于深色模式时,不再应用 Aero 向导样式,因为该样式在深色模式下无法正确渲染。
  • Visual Studio 2026 现已全面支持ARM64EC。该版本不提供安装程序包。部分模块(如Qt WebEngine 、QtWebView 以及Qt Quick 3D Physics)暂不支持。

Linux

  • QDesktopServices::openUrl() 现在会优先使用org.freedesktop.portal.OpenURI 的 XDG 桌面门户服务(如果可用),而非xdg-open 及其他备用方案。该门户的行为可能与之前使用的应用程序有所不同。
  • 当没有门户可用时使用的备用方案已更新:现在可识别 Plasma 6 的kde-open ,而对 KDE 3 时代的kfmclient 的支持已被取消。
  • 新的motionPreference 属性由桌面设置提供数据:org.freedesktop.appearance 门户命名空间中的reduced-motion 键,以及 GNOME 的org.gnome.desktop.interface enable-animations 设置。
  • 原生 GTK3 字体对话框现支持QFontDialog 中的字体筛选选项,包括可缩放与不可缩放字体,以及等宽与比例字体。
  • AT-SPI 辅助功能桥现可向辅助技术通知展开状态和可展开状态的变化。
  • 在 fontconfig 2.17.1 或更高版本上运行时,从 Qt 资源中添加的字体再次被正确注册。
  • 在 X11 上,工具提示窗口不再在每次显示时都被重新创建。
  • QNetworkProxy 在使用 libproxy 后端时,现已支持*_PROXY 环境变量中的socks5h 方案。

macOS

  • QScreen::grabWindow() 现在使用 ScreenCaptureKit 代替已弃用的CGDisplayCreateImageForRect 。首次使用该 API 时,将显示权限提示。
  • QWindows 嵌套在未翻转的NSView中的子视图,在父视图调整大小时,会保持相对于父视图左上角的相对位置。
  • QCocoaNativeInterface::setEmbeddedInForeignView() 将 Qt 视图层次结构嵌入外部NSView 已不再必要,也不再受支持。Qt 现已自动管理此过程。
  • 基于静态 Qt 构建的沙箱应用,在 Apple 平台上现在默认可重定位。
  • QMainWindow统一的标题和工具栏模式现在通过Qt::ExpandedClientAreaHint 和Qt::NoTitleBarBackgroundHint 实现,而不是已弃用的带纹理的NSWindow 样式。
  • QStandardPaths::standardLocations() 现为ConfigLocation 、GenericConfigLocation 和AppConfigLocation 包含全局/Library/Preferences 目录。

Linux 上的 Wayland 客户端

  • 新增对用于会话恢复的XdgSessionManager Wayland 协议扩展的支持。
  • bradient 客户端装饰主题现可显示最小化、最大化及关闭按钮的提示。

Wayland 合成器

  • 新增对linux-dmabuf-v1 稳定协议(版本4)的支持。若要使用该协议,请选择“linux-dmabuf-v1”作为客户端缓冲区集成方案。出于兼容性考虑,之前的(版本3)实现仍可通过“linux-dmabuf-unstable-v1”继续使用。

HarmonyOS

Qt 6.12 作为技术预览版引入了对HarmonyOS(OpenHarmony API 级别 23,HarmonyOS 6.1.0)的支持。目前支持 Vulkan,但辅助功能和EmbeddedUIExtensionAbility 尚未提供。

为帮助在HarmonyOS上构建和部署Qt应用程序,提供了以下工具和CMake函数:

  • harmonydeployqt可将 Qt 应用程序打包为 HarmonyOS 应用程序包 (HAP),复制所需的 Qt 库和插件,生成build-profile.json5 和module.json5 元数据,并支持嵌入 HAP 签名配置。
  • harmonyostestrunner 通过hdc 在已连接的 HarmonyOS 设备或模拟器上运行 Qt 自动测试,该操作由ctest 触发。
  • qt_add_harmonyos_permission()用于声明应用程序所需的 HarmonyOS 权限。

HarmonyOS 部署的关键 CMake 目标属性包括:

有关已知平台限制的完整列表,请参阅Qt for HarmonyOS 平台限制维基页面。

移动平台

Android

适用于 Android 的 Qt
  • 将 Gradle 更新至 9.5.1,并将 Android Gradle 插件更新至 9.2.1。
  • 将默认目标 SDK 版本更新为 Android 17(API 级别 37)。
  • 新增对 Android 13 及更高版本中预测性返回手势的支持。Qt 通过 `OnBackInvokedCallback` 传递返回事件,并默认启用 `android:enableOnBackInvokedCallback ` 清单属性。
  • 新增对 Gradle 多模块构建的支持,通过QT_ANDROID_GRADLE_MULTI_MODULE 启用。这是Play Feature Delivery 的基础。CMake 无需androiddeployqt或第三方工具即可处理整个部署流程,使构建过程更快、更简单。
  • 已弃用QT_USE_ANDROID_MODERN_BUNDLE CMake 变量,转而使用QT_ANDROID_GRADLE_MULTI_MODULE。为保持向后兼容性,旧名称仍被识别。
  • 新增了对Qt::InputMethodHint::ImhNoFullscreen 、ImhDecimalNumbersOnly 和ImhNoEditMenu 输入法提示的支持。
  • 按下返回键现在会将应用置于后台,而非退出应用,详见“返回键和返回手势”。
  • 针对 TalkBack 的辅助功能改进:
    • Qt XML 现可响应 `ACTION_SHOW_ON_SCREEN ` 操作。
    • Qt 现会报告视口滚动和滚动位置的变化。
    • Qt 现支持可展开和已展开状态。
    • 当辅助功能焦点移至文本输入框时,软键盘将不再弹出。
    • motionPreference 提示现已反映系统“Remove animations ”设置。
  • androidtestrunner现可识别 `--serial ` 和 `--output ` 选项,能在测试运行期间检测到设备断开连接,并输出更完善的崩溃和“应用程序无响应”(ANR)诊断信息。
  • 当捆绑的 FFmpeg 构建需要 OpenSSL 库时,Qt 现可自动部署这些库,并通过OPENSSL_ROOT_DIR 或 vcpkg 定位它们。
  • Gradle 模板不再强制使用resConfig "en" 。
Qt Quick 适用于 Android

iOS

嵌入式平台

Boot to Qt 和 Qt Onboard

  • 从 Qt 6.12 LTS 开始,预编译的Boot to Qt 镜像将不再可通过Qt Online Installer 或您的 Qt 账户下载。

    取代二进制文件,现推出两种基于容器的发布版本:

    • 构建容器:一个开箱即用的环境,预装了所有必要的构建工具,可快速为您的目标硬件构建基于 Yocto 的 Linux 镜像。
    • 演示容器:包含 Qt 演示启动器,其中收录了一组精心挑选的预选演示项目,可立即展示 Qt 的各项功能。

    这些容器将在 Qt 6.12 LTS 补丁发布周期内分阶段推出,并在 Qt 6.12.4 正式发布前全面实现基于容器的交付模式。

  • 新平台:
    • Orange Pi 2
    • NXP i.MX95
    • 高通 Dragonwing IQ6
    • 高通 Dragonwing IQ9
    • Renesas RZ/G3E

实时操作系统

QNX
  • 在 QNX 上增加了对 Vulkan 的支持。
  • Qt Multimedia 现可在 QNX 8.0 上构建。由于尚未为 QNX SDP 8.0 实现音频后端,因此尚不支持音频播放和录制。
VxWorks
  • 已添加对 VxWorks 26.03 的支持。

WebAssembly

  • QAudioSource 和QAudioSink 现在使用 Web Audio API AudioWorklets 后端代替 OpenAL,从而支持浏览器原生的低延迟音频采集。
  • texImage2D 现在,当使用 Qt Quick。
  • 已添加对QCameraFormat 的支持。

API 变更列表

这些页面概述了 Qt 6.12 中的 API 变更:

已知问题

有关 Qt 6.12 中已知问题的信息,请参阅Qt Wiki。

© 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.