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 核心模块
- 增加了用于组合多个未来的 QtFuture::whenAll() 和 QtFuture::whenAny() 函数。
- 增加了接受权限参数的 QDir::mkdir() 和 QFile::open() 重载。
- QMetaType 现在可以转换任何 QFuture<T> 到 QFuture<void>。
- 增加了 QDirIterator::nextFileInfo(),用于前进并获得完整的文件信息。
- QLocale 将语言代码映射到语言值和从语言值映射到语言代码的功能现在有重载指定要考虑哪些 ISO 639 代码类型。
- QRegularExpressionMatch 现在有了 hasCaptured() 方法来测试是否捕获了指定的组。
- QProcessEnvironment 获得了一个新的枚举和构造函数,允许您选择当相应的 QProcess 启动时,进程环境是否应从父进程继承。
注意:在较老的 Qt 版本中,默认行为是继承,尽管文档 said it 不会。Qt 6.3 将默认构造函数的行为更改到实际匹配文档。即,使用 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的rvalue构造函数。
- QCborMap::fromJsonObject()和QCborArray::fromJsonArray()现在有了rvalue重载。
- 添加了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。
- 所有指针处理器都具有可设置的非码
父
属性。 - 在HoverHandler和WheelHandler中新增了一个可通过
阻塞
属性来控制hover事件和轮事件是否传递到处理器父元素及其后面的项目和处理器的事件。 - 在TapHandler中新增了一个gesturePolicy值:
DragWithinBounds
;它类似于非码WithinBounds
,除了即使用户在持续点击的同时拖拽,timeHeld在拖拽过程中不会重置,且无论拖拽阈值,当用户持续足够长时间时,会发出longPressed信号。这对于在timeHeld的推动下直接实现诸如菜单(如指针处理器示例中的饼图菜单)之类的按下-拖拽-释放组件非常有用。 - QQuickItem::clipRect()现在提供了在viewport(父Flickable或Window)中可见的区域,并且可以用于在自定义项目中对场景图节点顶点进行优化,这可能会导致updatePaintNode()调用更为频繁。请参阅关于新标志的文档:QQuickItem::ItemObservesViewport和QQuickItem::ItemIsViewport。
- 为了节省内存和启动时间,现在Text和TextEdit将避免为无法看到的部分文本生成场景图节点,因为这部分文本位于viewport(即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实例和按钮被点击。如果您需要信号处理,您应该编写一个显式函数来接收这些参数。
onTapped: function(point, button) { ... } onDoubleTapped: (point, button)=> ...
- DragHandler的activeTranslation属性持有关于拖拽手势开始以来的移动量。persistentTranslation属性持有关于后续拖拽手势中发生的累积移动总和,可以重置为手势之间的任意值。
Qt Quick 控件模块
Qt Quick 对话框模块
- 新增了FolderDialog和MessageDialog。这些是支持该平台的原生对话框,和其他平台上的非原生Qt Quick对话框。
非原生对话框支持所有非原生样式:基本、融合、想象、材料和通用。
Qt Widgets模块
- QToolBar现在支持使用动态滚轮或触控板进行滚动。
增加了一些新的QStyle枚举值,允许样式自定义基于小部件的用户界面的一些外观和感觉方面。
- PM_LineEditIconMargin用于自定义QLineEdit中图标周围的边距。
- SH_Table_AlwaysDrawLeftTopGridLines用于控制是否总是绘制左部和顶部网格线,即使当标题隐藏时也是如此。
- SH_SpinBox_SelectOnStep用于控制使用上下按钮更改值时是否应选择文本。
- SP_TabCloseButton用于指定QTabBar标签页中关闭按钮的图标。
Qt网络模块
- QNetworkInformation学习传输介质。一个返回主网络接口传输介质的属性。
- QNetworkInformation还学习了isMetered属性。一个返回网络是否是计费网络的属性。
Qt QML模块
- 增加了技术预览中的QML类型编译器(
qmltc
),它将QML类型结构编译为C++。 - 向qmllint增加了一些新的警告,现在使用编译器基础设施。
- 仅头文件的qmlintegration模块允许标记类型以在QML模块中进行注册,而无需添加对qtdeclarative的依赖。然后可以通过新的CMake API qt_generate_foreign_qml_types()添加到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: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 数据可视化模块
- 在 Q3DSurface 中为 QSurface3DSeries 新增了 wireframeColor 属性以设置线框颜色。
- 在 Q3DBars 中为条形图的行添加了新的 rowColors 属性以设置不同行不同的颜色。
- 在 Q3DBars 中添加了新的 barSeriesMargin 属性以设置单个条形图的边缘。
- 为 QAbstract3DGraph 添加了一个 hasSeries 函数来检查是否已添加一个系列。
- 添加了对 16 位高度图的支持。
Qt 定位模块
- 为 Android 和 iOS 平台新增了 DirectionAccuracy 属性。它表示提供方位角的准确性。
Qt 蓝牙模块
- 扩展了 QBluetoothLocalDevice 的 Windows 实现。它可以正确报告适配器状态,并允许切换其状态。但是,对连接/断开设备的跟踪支持尚不存在。
- 扩展了 QBluetoothDeviceInfo API,以公开在广播期间发布的低功耗蓝牙服务数据。
Qt Wayland 组合模块
- 添加了一个创建自定义外壳扩展的 API。有关使用说明,请参阅 示例。
- 添加了一个支持所有在 Qt 中可用的窗口系统功能的 Qt Shell。
- 添加了对 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 的构建有效。
- 使用 Emscriptens 模拟 POSIX TCP Sockets over WebSockets 在 WebSocket 上隧道传输 TCP 和 UDP 套接字。此支持仅限于主线程上的异步套接字。
ARM 上的 Windows
由于尚未解决 Qt 优化构建的问题,ARM64 上的 Windows 仍处于技术预览状态。
移动平台
Android
- 内置购买功能演示和Qt 3D:行星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的项目现在会产生默认的启动屏幕。
嵌入式平台
引导至Qt
- 引导至Qt堆栈已更新到使用Yocto 3.4(honister)。
- Qt PDF和Qt语言服务器已被包含在引导至Qt堆栈中。
其他
Wayland
- 实现了支持
DataDeviceV3
协议。 - 将
支持升级到版本7。 - 如果服务器支持多个接口,添加了对选择输入方法协议的支持。这可以通过设置QT_WAYLAND_TEXT_INPUT_PROTOCOL为协议名称来实现。
API更改列表
这些页面包含了Qt 6.3的API更改概述
Qt 6所有版本中的新增内容
Qt 6.0中的新API列表。 | |
Qt 6.1中的新API列表。 | |
Qt 6.2中的新API列表。 | |
Qt 6.3中的新API列表。 | |
Qt 6.4中的新API列表。 | |
Qt 6.5中的新API列表。 | |
Qt 6.6中的新API列表。 | |
Qt 6.7中的新API列表。 | |
列出了Qt 6.0的新特性。 | |
列出了Qt 6.1的新特性。 | |
列出了Qt 6.2的新特性。 | |
Qt 6.3中的新特性 | |
列出了Qt 6.4的新特性。 | |
列出了Qt 6.5的新特性。 | |
列出了Qt 6.6的新特性。 | |
列出了Qt 6.7的新特性。 |
© 2024 Qt公司有限公司。此处包含的文档贡献属于其各自的版权拥有者。此处提供的文档根据免费软件基金会发布的GNU自由文档许可证版本1.3的条款进行许可。Qt及其相关标志是芬兰和/或其他国家的Qt公司有限公司的商标。所有其他商标属于其各自的所有者。