Qt 6.3 的新功能
Qt 6.3 中的新增和恢复的模块
Qt 6.3 新增了以下模块:
- Qt 语言服务器:实现了语言服务器协议规范和 JsonRpc 2.0协议。该模块不包含公共 API。
Qt 6.3 重新引入了以下在 Qt 6.2 中未包含的模块。所列出的所有模块均已移植到 Qt 6 和 CMake 构建系统中。
- Qt PDF (技术预览版)
有关每个模块变更的更详细列表,请参阅《Qt 6 中 Qt 模块的变更》。
Qt 6.3 的新功能
Qt Core 模块
- 新增了用于组合多个未来对象的QtFuture::whenAll() 和QtFuture::whenAny() 函数。
- 新增了接受权限参数的QDir::mkdir() 和QFile::open() 重载。
- QMetaType 现在可以将任何QFuture<T> 转换为QFuture<void>。
- 添加了QDirIterator::nextFileInfo(),用于向前移动并获取完整的文件信息。
- QLocale语言代码与 Language 值之间的映射现在具有重载,用于指定应考虑哪些 ISO 639 代码类型。
- QRegularExpressionMatch 现在提供了hasCaptured() 方法,用于测试给定组是否被捕获。
- QProcessEnvironment 新增了一个枚举和构造函数,允许您选择在启动相应的QProcess 时,进程环境是否应从父进程继承。
警告:在 较旧的 Qt 版本中 ,默认行为是继承,尽管文档中说明不会如此。Qt 6.3 更改了默认构造函数的行为,使其与文档描述一致。也就是说,使用由QProcessEnvironment() 创建的QProcessEnvironment 来启动QProcess 时,该进程将在空环境中启动。请使用QProcessEnvironment (QProcessEnvironment::InheritFromParent )恢复旧的行为。
此外,还添加了方法inheritsFromParent(),用于检测是否按新方式构造的实例。
- QVarLengthArray 现已提供emplace() 和emplace_back() 方法。
- QLocale 、QTime 和QDateTime 的解析和序列化所使用的时间格式现在支持“aP”和“Ap”格式指定符来获取 AM/PM 指示符,并使用符合区域设置的大写/小写形式;而此前,时间格式的作者必须选择一种可能与用户区域设置冲突的大写/小写形式。 对于QTime 和QDateTime ,区域设置始终为 C,其指示符均为大写。对于QLocale ,大写/小写形式现将与 amText() 或 pmText() 保持一致。此前,'aP' 会被解读为小写指示符后跟 'P',而 'Ap' 则被解读为大写指示符后跟 'p'。 现在,“P”或“p”将被视为格式指定符的一部分:如果希望保留先前的行为,请使用“APp”或“apP”作为格式指定符,或者在格式中将“p”或“P”用引号引起来。 除此之外,先前的 'a'、'ap'、'A' 和 'AP' 指定符不受影响。
- QDebug 现在可以流式传输QVarLengthArray 对象。
- QObject::findChildren() 现在有一个不带名称的重载。
- 为QSemaphore 添加了重载和方法名称,以增强与 std::counting_semaphore 和 std::chrono 的兼容性。
- QJsonValue 现在具有接受QJsonArray 和QJsonObject 的右值构造函数。
- QCborMap::fromJsonObject() 和QCborArray::fromJsonArray() 现在具有右值重载。
- 添加了 `QByteArrayView::trimmed()` 以省略首尾空格。
- 在 `QByteArrayView` 中添加了数字解析方法。
- 在QByteArray 、QByteArrayView 和QUtf8StringView 中添加了 isValidUtf8() 方法。
- 添加了QCryptographicHash::resultView(),用于提供对result() 的封装。
- QStringBuilder 现在支持QByteArrayView 。
- QUuid 现在可以从QAnyStringView 构建。
- QLocale 现在有一个接受QStringView 的构造函数。
- QByteArrayList::join() 现在有一个重载,接受QByteArrayView 作为参数。
- QCryptographicHash::addData() 现在有一个重载,接受QByteArrayView 。
- qSwap() 现为 constexpr。
- 新增了公共 CMake API:
- 用于设置全项目范围的默认值:qt_standard_project_setup()
- 用于部署应用程序:qt_generate_deploy_app_script()(处于技术预览阶段)
- 用于在安装时生成 qt.conf 文件:qt_deploy_qt_conf()(处于技术预览阶段)
- 用于在安装时部署运行时依赖项:qt_deploy_runtime_dependencies()(技术预览版)
- 用于执行与 Qt 项目相关的平台特定任务:qt_finalize_project()(技术预览版)
Qt GUI 模块
- 现在,使用非自动值调用 `QGuiApplication::setLayoutDirection()` 会禁用基于已安装翻译器的自动检测。
- 传递给 `QDesktopServices::setUrlHandler()` 的 URL 处理程序,现在必须在被销毁之前通过调用 `unsetUrlHandler()` 将其移除。依赖处理程序的析构函数来隐式取消设置它们的做法已被弃用。
- QVulkanWindow 现在将启用物理设备报告为支持的所有 Vulkan 1.0 功能。
Qt Quick 模块
- 新增项目:TreeView 。
- 所有指针处理程序都具有可设置的
parent属性。 - HoverHandler 和WheelHandler 具有
blocking属性,用于控制悬停和滚轮事件是否分别传播到处理程序parent背后的项目和处理程序。 - TapHandler 现在多了一个gesturePolicy 值:
DragWithinBounds;它与WithinBounds类似,不同之处在于,即使用户在按住指点的同时进行拖拽,timeHeld 在拖拽过程中也不会重置,而且如果用户按住的时间足够长,无论拖拽阈值如何,都会发出longPressed 信号。 这对于实现“按住-拖动-释放”类型的组件(例如菜单,如指针处理程序示例中的扇形菜单)非常有用,同时可以使用timeHeld直接驱动“展开”动画。 - QQuickItem::clipRect() 现在提供了在viewport 中可见的区域(父Flickable 或Window ),可用于在自定义项目中限制场景图节点的顶点数量以进行优化,但代价是updatePaintNode() 会被更频繁地调用。请参阅关于新信号QQuickItem::ItemObservesViewport 和QQuickItem::ItemIsViewport 标志的文档。
- 为了节省内存和启动时间,Text 和TextEdit 现在会避免为因超出视口范围(Flickable 或Window )而不可见的大段文本生成场景图节点。
- Text 现在可以渲染来自 HTML 或 Markdown 的水平线。
- 在Text 中,水平线以及下划线、上划线和删除线均可通过 HTML 源代码中包含的 CSS 规则进行着色。
import QtQuick Text { textFormat: Text.RichText wrapMode: Text.WordWrap width: 440 font.pointSize: 12 text: `<p><u style="color: green;">green with underline</u> <span style="text-decoration: underline; text-decoration-color: green;"> green underline</span></p> <p><s style="background-color: lightgrey;">plain strikethrough</s> <span style="text-decoration: line-through; text-decoration-color: orange;"> orange strikethrough</span></p> <p><span style="text-decoration: overline;">plain overline</span> <span style="text-decoration: overline; text-decoration-color: red;"> red overline</span></p>` } - QQuickItem::dumpItemTree已添加 () 函数;可从 C++(类似于QObject::dumpObjectTree()) 或从 QML 调用该函数,以显示某项及其所有子项的qDebug- 运算符输出结果,并进行缩进以展示树形结构。
- TapHandler tapped 、 和 信号现在有两个参数: 实例以及正在被点击的 。如果您需要信号处理程序,应编写一个显式函数来接收这些参数:singleTapped doubleTapped QEventPoint
buttononTapped: function(point, button) { ... } onDoubleTapped: (point, button)=> ... - DragHandler activeTranslation 现在保存了自拖动手势开始以来的位移量。 保存了后续拖动手势期间发生的累计位移量,并且可以在不同手势之间重置为任意值。persistentTranslation
Qt Quick Controls 模块
Qt Quick Dialogs 模块
- 已添加FolderDialog 和MessageDialog 。在支持原生对话框的平台上,这些是原生对话框;在其他平台上,则是非原生Qt Quick 对话框。
非原生对话框支持所有非原生样式:Basic、Fusion、Imagine、Material 和 Universal。
Qt Widgets 模块
- QToolBar 现在支持使用动感滚轮或触控板进行滚动。
新增了若干QStyle 枚举值,允许样式自定义基于小部件的用户界面的其他外观和感觉方面:
- PM_LineEditIconMargin 用于自定义QLineEdit 中图标的边距。
- SH_Table_AlwaysDrawLeftTopGridLines 用于控制左侧和顶部的网格线是否始终显示,即使标题栏被隐藏时也是如此。
- SH_SpinBox_SelectOnStep 用于控制使用上下按钮更改数值时是否应选中文本。
- SP_TabCloseButton 指定QTabBar
Qt Network Module
- QNetworkInformation 已学习 transportMedium。该属性返回主网络接口的传输介质。
- QNetworkInformation 还学习了 isMetered。该属性返回网络是否受流量限制。
Qt Qml 模块
- 添加了技术预览版 QML 类型编译器(
qmltc),可将 QML 类型结构编译为 C++。 - 为 qmllint 添加了若干新警告,该工具现已采用编译器基础设施。
- 仅包含头文件的 qmlintegration 模块允许在 QML 模块中标记待注册的类型,而无需添加对 qtdeclarative 的依赖。随后可通过新的qt_generate_foreign_qml_types()CMake API 将这些类型添加到 QML 模块中。
- qmlcachegen 现在会将合适的函数和表达式编译为 C++,以提升性能。
- 在Binding 和PropertyChanges 中添加了对通用分组属性的支持,允许在这些上下文中使用分组属性语法(例如,
someId.someProperty)。 - 引入了基础的QML Language Server 。
- 通过QML_NAMESPACE_EXTENDED 引入了对命名空间作为其他命名空间扩展的支持。
- 新增了公共 CMake API:
- 用于在 QML 模块中注册目标的外部类型:qt_generate_foreign_qml_types()(技术预览版)
- 用于将 QML 代码编译为 C++:qt_target_compile_qml_to_cpp()(技术预览版)
- 用于部署 QML 应用程序:qt_generate_deploy_qml_app_script()(处于技术预览阶段)
- 用于在安装时部署 QML 模块的运行时组件:qt_deploy_qml_imports()(技术预览版)
- 用于查询 QML 模块的信息:qt_query_qml_module()(技术预览版)
Qt Quick 3D 模块
- 新增了ReflectionProbe ,使模型能够显示反射效果。
- Particles3D:新增了
ParticleCustomShape3D元素,可从自定义CBOR二进制文件中加载发光形状。 - Particles3D:Sprite 粒子现已支持 3D 环境光。
- Particles3D:新增
DynamicBurst元素,用于声明式动态发射以及在轨迹开始/结束时刻进行发射。 - 新增ResourceLoader 组件,用于显式设置资源生命周期(技术预览版)
- PrincipledMaterial:新增对清漆(ClearCoat)、透射(Transmission)和折射(Refraction)的支持。
- glTF2:导入器现支持以下新增扩展:KHR_materials_clearcoat、KHR_materials_ior、KHR_materials_transmission、KHR_materials_volume
Qt WebEngine 模块
- 现在使用 Python 3 而不是 Python 2 进行构建
- 添加了用于替换 QML 触摸选择菜单的 API
- 新增了公共 CMake API:
- 用于将Hunspell词典转换为Qt WebEngine 的
.bdic二进制格式:qt_add_webengine_dictionary()
- 用于将Hunspell词典转换为Qt WebEngine 的
Qt Data Visualization 模块
- 在 Q3DSurface 中新增了一个wireframeColor 属性,用于设置 QSurface3DSeries 的线框颜色。
- 新增了rowColors 属性,用于为Q3DBars中的条形图行设置不同的颜色。
- 新增了一个barSeriesMargin 属性,用于设置 Q3DBars 中单个条形图的边距。
- 在 QAbstract3DGraph 中添加了hasSeries 函数,用于检查一个系列是否已被添加。
- 增加了对 16 位高度图的支持。
Qt Positioning 模块
- 为 Android 和 iOS 平台新增了DirectionAccuracy 属性。该属性表示所提供方位角的精度。
Qt Bluetooth 模块
- 扩展了 Windows 平台上 `QBluetoothLocalDevice` 的实现。它能正确报告适配器状态,并允许切换其状态。目前仍不支持已连接/已断开设备的跟踪功能。
- 扩展了QBluetoothDeviceInfo API,以公开蓝牙低功耗服务在广告期间发布的数据。
Qt Wayland Compositor 模块
- 新增了一个用于创建自定义 Shell 扩展的 API。有关使用说明,请参阅示例。
- 新增了一个Qt Shell,支持 Qt 中所有可用的窗口系统功能。
- 增加了对presentation-time 协议的支持。
- 在同一服务器中增加了对多种输入法协议的支持,以支持来自不同来源的客户端。
平台变更
技术预览平台
WebAssembly
对 Qt for WebAssembly 进行了多项改进。详情请参阅Qt for WebAssembly平台文档。
- 新增了将图像和 HTML 文本复制/粘贴到系统剪贴板的功能。
- 新增了 SIMD 支持。请注意,启用 SIMD 需要从源代码编译 Qt。
- 新增了在次级线程上调用 `QEventLoop::exec()` 和 `QThread::exec()` 的支持。
- 新增了在主线程上使用Emscripten Asyncify 调用QEventLoop::exec() 和QDialog::exec() 的支持。请注意,启用 Asyncify 需要从源代码构建 Qt。
- 在启用 asyncify 的构建中,拖放功能现已正常工作。
- 新增了对通过 WebSockets 隧道传输 TCP 和 UDP 套接字的支持,使用的是 Emscripten通过 WebSockets 模拟的 POSIX TCP 套接字。此支持仅限于主线程上的异步套接字。
ARM 架构的 Windows
Windows on ARM64 仍处于技术预览阶段,因为 Qt 优化构建版本存在的问题尚未得到解决。
移动平台
Android
- 应用内购买演示和“Qt 3D :Planets QML示例”针对Android平台进行了专门优化。
- 已将 Gradle 更新至 7.2.0,并将 Android Gradle 插件 (AGP) 更新至 7.0.2(需要 JDK 11 或更高版本)。
- 为 CMake Android 项目添加了缺失的 _make_aab 目标。
- 为 CMake 添加了多 ABI 构建,详见QT_ANDROID_ABIS。
- QML 模块现已整理到用户构建文件夹下的一个名为“android-qml”的公共目录中。该目录作为androiddeployqt 工具的通用导入路径。
- QML 测试平台现已在 Android 构建中正常运行。
iOS
- 基于 CMake 的项目现在会生成默认启动屏幕。
嵌入式平台
Boot to Qt
- Boot to Qt 堆栈已更新为使用 Yocto 3.4(honister)。
- Qt PDF Boot to Qt 堆栈中已包含 Qt 语言服务器。
其他
Wayland
- 已实现对
DataDeviceV3协议的支持。 - 将
wl_seat支持升级至 7 版。 - 如果服务器支持多个接口,则增加了对输入法协议选择的支持。这可以通过将 QT_WAYLAND_TEXT_INPUT_PROTOCOL 设置为协议名称来实现。
API 变更列表
以下页面概述了 Qt 6.3 中的 API 变更:
所有 Qt 6 版本的新增内容
列出了 Qt 6.0 中的新功能。 | |
列出了 Qt 6.1 的新功能。 | |
列出了 Qt 6.2 中的新功能。 | |
列出了 Qt 6.3 中的新功能。 | |
列出了 Qt 6.4 中的新功能。 | |
列出了 Qt 6.5 的新功能。 | |
列出了 Qt 6.6 中的新功能。 | |
列出了 Qt 6.7 的新功能。 | |
列出了 Qt 6.8 中的新功能。 | |
列出了 Qt 6.9 中的新功能。 | |
列出了 Qt 6.10 的新功能。 | |
列出了 Qt 6.11 的新功能。 | |
列出了 Qt 6.12 的新功能。 |
© 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.