Qt 6.2 新特性

Qt 6.2 中的新增和恢复模块

Qt 6.2 添加以下模块

Qt 6.2 重回了以下模块,这些模块在 Qt 6.1 中不存在。所有列出的模块都移植到了 Qt 6 并支持 CMake 构建系统。

有关每个模块更改的更详细列表,请参阅 Qt 6 中对 Qt 模块所做的更改

  • Qt 蓝牙
    • 移除了对 BlueZ 4 的支持。
    • 移除了 Win32 后端。因此,不再支持使用 MinGW 的 Qt 蓝牙。
    • 移除了 QML API。
    • 移除了 QBluetoothTransferManager 和相关类。
    • QBluetoothLocalDevice 中移除了与配对代理相关联的功能。
  • Qt 多媒体
    • Qt 多媒体公共 API 由五个大的功能模块组成。每个 API 与 Qt 5 相比都进行了重大变更
      • 设备发现
      • 低级别音频
      • 播放和解码
      • 捕获和录制
      • 视频输出管线
    • 当前支持的底层
      • Linux: GStreamer
      • Windows: WMF
      • macOS/iOS: AVFoundation
      • Android: MediaPlayer 和 Camera API
  • Qt NFC
    • 移除了对 Linux/NearD 的支持。
    • 添加了对 iOS 的支持。
  • Qt 定位
    • 许多属性现在都是可绑定属性。
    • 将 QGeoPolygon::path() 重命名为 QGeoPolygon::perimeter
    • QGeoLocation 现在使用 QGeoShape 而不是 QGeoRectangle 作为边界区域。
    • 多个定位类中的错误信号 error() 被重命名为 errorOccurred()
    • 移除了 QGeoPositionInfoSourceFactoryV2,并且现在 QGeoPositionInfoSourceFactory 支持为创建的对象设置自定义参数。
    • NMEA 支持被重新设计。将 serialnmea 插件重命名为 nmea,现在可以从 TCP 套接字或原始文件读取输入流。已移除 nmeaSource 属性。
  • Qt 远程对象
    • 本地连接后端现在支持抽象命名空间(这是 Linux 特有的扩展),通过在 URL 中使用新的 localabstract 架构实现。
    • .rep 文件现在支持:
      • 类枚举。
      • QFlags.
      • 多行注释(C 风格)。
    • 枚举和 flags 现在可以在 POD 类型中使用,并作为 .rep 文件中 QMapQHash 属性的键。
  • Qt 传感器
    • 大多数 QML 面向属性现在都是可绑定的。
    • Sensor::typeQSensor::type 属性现在被标记为常量。
    • 为 QSensorBackend::sensorBusy() 添加了参数,以便也能清除忙碌状态。
    • 删除了 qtimestamp 的 typedef。
    • 将传感器类型字符串 type 重命名为 sensorType
    • Windows: 现在可以要求 Windows 10 API,从而扩展支持传感器的数量。
    • 已从支持的平台中删除 TI Sensor Tag。
    • 已删除 Linux sysfs 后端。
    • 已删除传感器手势支持(在此处欢迎反馈:[QTBUG-97066](https://bugreports.qt.io/projects/QTBUG/issues/QTBUG-97066))。
    • 由于 Sensorfw 本身尚未移植到 Qt 6,因此作为平台的 Sensorfw 已被删除。
    • 没有 Sensorfw 后端的传感器类型(IRProximity、Lid 和 Tap)不再列出为受支持类型。
    • 删除了没有任何后端的传感器类型(Altimeter、Distance 和 Holster)。
  • Qt 串行总线
  • Qt 串行端口
  • Qt 网络频道
    • QWebChannel 属性现已支持绑定。
    • 现在可以配置 QWebChannel 的属性更新间隔。默认更新间隔为 50ms。
    • QWebChannel 现在支持对可绑定属性的属性更新。但是,如果主属性没有 NOTIFI 信号,客户端不提供通用的回调机制。
    • 现在正确处理了位于不同线程中的对象的信号([QTBUG-51366](https://bugreports.qt.io/browse/QTBUG-51366))。
  • Qt 网页引擎
  • Qt 网络套接字
  • Qt 网页视图

Qt 6.2 的新功能

Qt 核心模块

  • 新增功能
    • 新增了 QByteArrayView::compare
    • 新增了 QFlags::test(Any)Flag(s) 方法。
    • 新增了 QHashSeed 以控制哈希(种子现在是 size_t);这将替换 qGlobalQHashSeed 和 qSetGlobalQHashSeed。
    • 新增了 PRIxQTDATATYPE 宏,便于进行 printf()-风格的格式化,无需进行强制类型转换或警告。
  • 许多属性现在可绑定。
  • 现在图形簇可以处理表情符号。
  • Windows 上的 UNC 路径和网络共享现在得到了一致处理。
  • 现在容器(主要是 QStringQByteArray 以及它们的视图)中各种 indexOf()lastIndexOf() 方法的 start-offset 参数(称为 from)的处理现在更加协调一致。
  • 类似于自Qt 6.0发布以来就有的QString::number(),现在QByteArray::number()对有符号整数类型的重载返回一个包含负号和数字绝对值的文本,而不是在除了十进制以外的所有基数中都将负整数强制转换为无符号类型。
  • QCalendar现在支持从自定义后端的ID进行构造。
  • QCharQPointQPointF 现在是原始类型,而不仅仅是可移动类型。
  • QCoreApplication::exit()现在与quit()一样是一个槽(正如文档长期声称的那样);对于QEventLoopQThread也是一样。
  • QDateTime现在在整个time_t范围内考虑到时区(在平台提供此类信息的情况下),而不是人为地将范围限制在1970 - 2037。
  • 完善了QFlags的值类型行为,现在更系统性地使用它。
  • 当为C++20构建时,QList(因此也是QVector)现在是连续迭代器,满足连续范围。
  • QLocalSocket::waitFor*()方法改为支持Windows上的双工操作(它们在Unix上已经支持)。
  • QLockFile方法添加了std::chrono重载,避免了在UTC和时间本地化之间进行不必要的转换。
  • QString现在可以从char8_t(当可用时)构建。
  • 使QThreadPool的线程优先级可配置;如果线程池有一个名称,则线程将共享池的名称。
  • 大量的错误修复、清理和文档改进。

Qt GUI模块

  • QImage添加了浮点图像格式,适用于16位和32位浮点数。
  • 现在从RGB图像转换为灰度图像或将RGB颜色绘制到灰度图像上时,将进行伽玛校正并产生输入颜色空间的光亮度值。
  • 现在支持在带有下划线、上划线和删除线的富文本跨度中支持CSS的text-decoration-color属性。

Qt Quick模块

Qt Quick Controls模块

  • 添加了一个新的控件;SelectionRectangle。该控件可以通过使用样式化的选择矩形来选择TableView中的单元格。

Qt Widgets模块

Qt Network模块

  • QSslSocket
    • 之前的TLS后端(在Qt 6.1中转换为类似插件的类),已从QtNetwork中移除,并作为真正的插件实现。
    • 现在可能运行时存在多个TLS后端,例如,OpenSSL和Schannel,或OpenSSL和SecureTransport。
  • QNetworkInformation
    • 引入了一个新属性isBehindCaptivePortal,可用于判断用户是否连接到一个有接入网的网络。

Qt QML模块

  • 核心语言
    • 增加了对可选链式调用的支持。
    • 增加了as类型转换:这主要有助于工具,但也可以用于替换代码,例如return (obj instanceof Item) ? obj.width : 42,使用(obj as Item)?.width ?? 42
  • 增加了对QML模块的公共CMake API支持:qt_add_qml_module()
    • 负责生成qmldirqmltypes
    • 如果插件仅注册类型,可以自动创建插件。
    • 内置对lint目标的支持。
  • QML工具
    • qmllint
      • 增加了对警告严重级别的更细致的设置;可以完全禁用警告,仅将其设置为信息性警告,或者使其导致非零退出码。
      • 增加了用于配置目录级别警告级别的设置文件(.qmllint.ini)。可以使用qmllint --write-defaults生成默认设置文件。
      • 现在可以通过注释在块中禁用警告;//qmllint enable/disable <warning-type1> <warning-type2...>
      • 在lint文件时性能得到了显著提升,尤其是在lint包含大量导入的多文件时。
      • 增加了用于工具的JSON输出支持。
    • qmlformat
      • qmlformat现在利用了新的qmldom库,并且应该产生更好的输出。

Qt Quick 3D模块

  • 增加了对实例渲染的支持,这是一种绘制具有不同变换的同一对象的多个实例的优化方式。
  • 增加了3D粒子,一个用于向3D场景添加粒子效果的API。这包括模型混合粒子的技术预览。
  • 增加了用于3D中的2D项目(在场景和在材质中)的Qt Quick输入事件。
  • 增加了从场景中的任意点进行基于射线的选择的API。
  • 增加了RuntimeLoader,使运行时加载glTF2文件成为可能。
  • 实现了视差遮挡映射:允许使用高度图而无需添加几何形状的成本。
  • 在材质上实现了深度绘制模式:允许对材料的深度绘制进行精细控制。

Qt数据可视化模块

  • 修复了背景渲染模式。
  • RenderDirectToBackground_NoClear已被弃用,因为在Qt 6中不再可以选择不清除窗口。
  • 许多小错误修复。

Qt图表模块

  • QScatterSeriesQLegend中增加了更多可供选择的标记形状。
  • QXYSeriesQLegend中增加了光标记功能。这是一个对点的较轻量级渲染。
  • 增加了通过QXYSeriesQBarSet的方法调用选择系列中点的功能。
  • 增加了在QXYSeries中设置颜色或使用自定义光标记用于所选点的功能。
  • QBarSet中添加了设置所选条形颜色的新功能。
  • QXYSeries中添加了显示最佳拟合线的新功能。
  • QXYSeries中添加了自定义系列中单个点外观的新功能。此功能允许设置每个点的可见性、标签可见性和大小。
  • QXYSeries添加了新的方法sizeBy(),该方法根据传入的值调整系列中点的大小。
  • QXYSeries添加了新的方法colorBy(),该方法根据传入的值和渐变调整系列中点的颜色。
  • 添加了新的轴类QColorAxis以支持colorBy()功能,显示颜色刻度。
  • 添加了禁用坐标轴中标签截断的新功能。
  • 通过缓存最近使用的文本边界提高了性能。
  • 通过setInteractive()方法将交互支持添加到QLegend。一旦启用,允许通过双击将图例断开连接。一旦断开连接,图例可以拖动和调整大小,并可以通过将其拖出边缘将其重新连接到图表的一侧。
  • QLegend添加了attachedToChartChanged()信号。
  • 更新了图例示例。

Qt for Python

  • 将新的示例、教程和视频添加到Qt for Python文档中。
  • 与Python 3.10rc2兼容。
  • 添加了QtDBus、QtNetworkAuth和QtBluetooth模块。
  • 添加了新的Shiboken功能,即不透明容器,以避免将C++容器复制到Python中再使用。
  • 当从源构建PySide时,现在可以使用qtpaths而不是qmake
  • QThreadPool的一些方法添加了对std::function的支持。
  • 添加了新的QML函数,并支持qmlRegisterSingletonInstance

平台更改

技术预览平台

ARM上的Windows

  • 将Windows on ARM64添加为技术预览平台。
  • 作为构建目标支持;目前没有主机的支持。
  • 已知限制
    • 尚未支持Qt WebEngine;缺少对Chromium的官方支持。
    • 尚未支持SSL;缺少对OpenSSL的官方支持。

桌面平台

Apple Silicon上的macOS

  • 正式支持作为目标和主机平台。
  • Qt SDK中的库被构建为通用二进制。
  • 已知限制
    • 缺少SSL支持。
    • 缺少postgresqlodbc数据库插件(QTBUG-93204)。
    • 缺少JIT支持(QTBUG-93206)。

Linux上的Wayland客户端

  • 触摸板捏合手势现在能够生成通过pointer-gestures-unstable-v1协议传送的缩放和旋转QNativeGestureEvent,如果合成器发送了这些事件。这允许Qt Quick PinchHandler通过触摸板捏合手势进行操作。识别双指、三指或四指手势。通过三指或四指滑动可以生成类型为Qt::PanNativeGesture的手势。双指快速滚动仍然会生成与以前相同的QWheelEvent

移动平台

Android

  • QtAndroidExtras(例如,sdkVersion()和context())中之前包含在QtAndroid命名空间下的某些方法已移动到QNativeInterface::QAndroidApplication
  • QCoreApplication中实现了一个新的权限API。
  • 其他QtAndroidExtras API保留为qtbase中的私有API,直到跨平台替代方案(如Intent、服务等)到位。
  • 已删除过时的Ministro代码,因为现在Android不再支持它。
  • 精简了AndroidManifest.xml,只包含与用户相关的标签,有助于维护性并减少混乱。
  • QCDebug()及其朋友现在在Android的logcat中作为标签使用类别。
  • 更新Android Gradle插件到4.1.3。
  • 修复了非SDK API风格的bug(QTBUG-71590),尽管Android 9+上的Android样式仍然受到影响(QTBUG-96149)。
  • 默认的targetSdkVersion设置为30,符合Google Play Store的要求。
  • 使用的build-tools版本和平台版本已升至30。
  • QDesktopServices自定义处理程序现在已启用,并允许您处理Android App Links等。
  • 增加了允许应用程序确定intent来源的信息,而不必创建QtActivity的扩展。
  • 修复了QML模块的导入,并添加了多个QML根路径的可能性。
  • 修复了Android上的Vulkan构建。

iOS

  • 改进了CMake支持。
  • 已知问题
    • 缺少默认的启动屏幕Storyboard。
    • 自定义库无法安装(QTBUG-95381)。

嵌入式平台

Qt for Device Creation许可下提供。

Boot to Qt

  • Boot to Qt堆栈已更新为使用Yocto 3.3(Hardknott)。
  • 添加了Intel NUC10(64位i5 x86)作为参考目标。
  • 添加了NVidia Jetson Tegra X2作为目标。

QNX

  • 添加了QNX 7.1和Ubuntu 20.04作为宿主。
  • 添加了NXP iMX8QM作为参考目标。

INTEGRITY

  • 添加了INTEGRITY 19.0.13和Ubuntu 20.04作为宿主。
  • 添加了Qualcomm Snapdragon 8155P作为参考目标。

WebOS

Qt 6.2已验证与LG webOS OSE 2.13.1兼容,使用Ubuntu 20.04作为开发宿主和Raspberry Pi4硬件。

API更改列表

这些页面包含Qt 6.2中API更改的概述

© 2024 The Qt Company Ltd. 本文档中包含的贡献者的版权。提供的文档授权使用由自由软件基金会发布的 GNU自由文档许可协议版本1.3。Qt及其相应的标志是The Qt Company Ltd在芬兰以及全球其他国家/地区的商标。所有其他商标归其各自所有者所有。