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 模块的变化》(Changes to Qt Modules in Qt 6)。
Qt 6.3 中的新功能
Qt Core 模块
- 添加了用于组合多个期货的QtFuture::whenAll() 和QtFuture::whenAny() 函数。
- 添加了接受权限参数的QDir::mkdir() 和QFile::open() 重载。
- QMetaType 现在可以将任何 <T> 转换为 <void>。QFuture QFuture
- 新增了QDirIterator::nextFileInfo() 函数,用于推进和获取完整的文件信息。
- QLocale语言值与语言代码的映射现在有了重载,可指定要考虑的 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 和 的 r 值构造函数。QJsonObject
- QCborMap::fromJsonObject() 和QCborArray::fromJsonArray() 现在有了 r 值重载。
- 已添加QByteArrayView::trimmed() 以消除前导空格和尾部空格。
- 为QByteArrayView 添加了数字解析方法。
- 为QByteArray 、QByteArrayView 和QUtf8StringView 添加了 isValidUtf8() 方法。
- 已添加QCryptographicHash::resultView() 以提供对result() 的查看。
- QStringBuilder 现在支持QByteArrayView 。
- QUuid 现在可以从 构建 QStringBuilder。QAnyStringView
- QLocale 现在,QStringBuilder 的构造函数可以使用 。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 longPressedtimeHeld
- 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-operator 对一个项目及其所有子项的输出,缩进显示树形结构。
- TapHandler tapped, 和 信号现在有两个参数: 实例和被点击的 。如果需要信号处理程序,应编写一个显式函数来接收这些参数:singleTapped doubleTapped QEventPoint
button
onTapped: 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 提供了几个新的枚举值,允许样式自定义基于 widget 的用户界面的其他外观和感觉方面:
- PM_LineEditIconMargin 自定义 中图标周围的边距。QLineEdit
- SH_Table_AlwaysDrawLeftTopGridLines 控制是否始终绘制左侧和顶部网格线,标题隐藏时也是如此。
- SH_SpinBox_SelectOnStep 控制使用上/下按钮更改数值时是否选择文本。
- SP_TabCloseButton 为模块选项卡中的关闭按钮指定图标。QTabBar
Qt Network 模块
- QNetworkInformation 获悉 transportMedium。返回主网络接口传输介质的属性。
- QNetworkInformation isMetered.返回网络是否已计量的属性。
Qt QML 模块
- 添加了技术预览 QML 类型编译器 (
qmltc
),可将 QML 类型结构编译为 C++。 - 为现在使用编译器基础结构的 qmllint 添加了几个新警告。
- 仅头文件的 qmlintegration 模块允许在 QML 模块中标记注册类型,而无需添加对 qtdeclarative 的依赖。这些类型可通过新的qt_generate_foreign_qml_types()CMake API 添加到 QML 模块中。
- qmlcachegen 现在可将合适的函数和表达式编译为 C++,以提高性能。
- 添加了新的公共 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:精灵粒子现在支持 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 字典转换为 QtWebEngine
.bdic
二进制格式:qt_add_webengine_dictionary()
- 用于将 Hunspell 字典转换为 QtWebEngine
Qt Data Visualization 模块
- 添加了一个新的wireframeColor 属性,用于在Q3DSurface 中为QSurface3DSeries 设置线框颜色。
- 为Q3DBars 添加了一个新的rowColors 属性,用于为条形图行设置不同的颜色。
- 在Q3DBars 中添加了一个新的barSeriesMargin 属性,用于设置单个条形图的边距。
- 在QAbstract3DGraph 中添加了一个hasSeries 函数,用于检查系列是否已添加。
- 已添加对 16 位高度映射的支持。
Qt Positioning 模块
- 为 Android 和 iOS 平台添加了新的DirectionAccuracy 属性。它表示所提供方位的精确度。
Qt Bluetooth 模块
- 扩展了QBluetoothLocalDevice 的 Windows 实现。它能正确报告适配器状态,并允许切换其状态。但仍缺少对连接/断开设备跟踪的支持。
- 扩展了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 的版本中使用。
- 使用 EmscriptensEmulated POSIX TCP Sockets over WebSockets,添加了对通过WebSockets 隧道传输TCP 和 UDP 套接字的支持。此支持仅限于主线程上的异步套接字。
ARM 上的 Windows
ARM64 上的 Windows 仍处于技术预览阶段,因为与 Qt 优化版本有关的问题尚未解决。
移动平台
安卓
- 改进了应用程序内购买演示和Qt 3D:PlanetsQML 示例。
- 将 Gradle 升级到 7.2.0,将 Android Gradle Plugin (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 和 Qt Language Server 已包含在 堆栈中。Boot to Qt
其他
路域
- 实现了对
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 中的新功能。 |
© 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.