新模块与恢复的模块
在 Qt 6.2 中,新增了以下模块:
- QtQuick.Dialogs:一个 QML 模块,为平台提供原生对话框,如果 Qt 没有提供原生对话框则使用 Qt Quick 回退。此版本中提供了 FileDialog 和 FontDialog。
Qt 6.2 重新引入了以下模块,这些模块在 Qt 6.1 中没有。所列模块均移植到 Qt 6 和 CMake 构建系统。
关于 Qt 模块在 Qt 6 中的变化,可以在 Changes to Qt Modules in Qt 6 中找到更详细的模块变化列表。
Qt Bluetooth
- 移除了对 BlueZ 4 的支持。
- 移除了 Win32 后端。因此,不再支持使用 MinGW 的 Qt Bluetooth。
- 删除了 QML API。
- 删除了 QBluetoothTransferManager 及相关类。
- 从 QBluetoothLocalDevice 中移除了关于配对代理的功能。
Qt Multimedia
- Qt Multimedia 公共 API 包含五个大型功能块。与 Qt 5 相比,每个 API 都进行了重大更改:
- 设备发现
- 低级音频
- 播放和解码
- 捕获和录音
- 视频输出管道
- 目前支持的后端:
- Linux: GStreamer
- Windows: WMF
- macOS/iOS: AVFoundation
- Android: MediaPlayer 和 Camera API
Qt NFC
- 移除对 Linux/NearD 的支持。
- 为 iOS 添加支持。
Qt Positioning
- 许多属性改为可绑定的。
- 将 QGeoPolygon::path() 重命名为 QGeoPolygon::perimeter 。
- QGeoLocation 现在使用 QGeoShape 代替 QGeoRectangle 作为边界区域。
- 在多个定位类的 error() 信号重命名为 errorOccurred()。
- 删除 QGeoPositionInfoSourceFactoryV2,QGeoPositionInfoSourceFactory 现在支持为创建的对象自定义参数。
- NMEA 支持被重新设计。serialnmea 插件重命名为 nmea,现在支持从 TCP 套接字或原始文件中读取输入流。移除了 nmeaSource 属性。
Qt Remote Objects
- 本地连接后端现在支持抽象命名空间(这是一个 Linux-specific 扩展),通过在 URL 中使用新的 localabstract 架构实现。
- .rep 文件现在支持:
- 类枚举。
- QFlags。
- 多行注释(C-style)。
- .rep 文件中的 Enums 和 flags 现在支持 POD 类型和作为 QMap 和 QHash 属性函据的键。
Qt Sensors
- 大部分面向 QML 的属性现在都是可绑定的。
- Sensor::type 和 QSensor::type 属性现在标记为常量。
- 向 QSensorBackend::sensorBusy() 添加参数,以便清除繁忙状态。
- 删除了 qtimestamp 的 typedef。
- 将传感器类型字符串重命名为 sensorType。
- Windows: 现在可以要求 Windows 10 API ,从而扩展受支持的传感器数量。
- TI Sensor Tag 不再作为支持的平台。
- 删除了 Linux sysfs 后端。
- 移除了传感器手势支持(欢迎在此处输入意见:QTBUG-97066)。
- 由于 Sensorfw 本身尚未移植到 Qt 6,因此删除了 Sensorfw 作为平台的部分。
- 仅具有 Sensorfw 后端(IRProximity、Lid 和 Tap)的传感器类型不再列为受支持。
- 删除了没有任何后端的传感器类型(高度表、距离和枪套)。
Qt Serial Bus
- 删除了 QCanBusFactory,QCanBusFactoryV2 重命名为 QCanBusFactory。
- QModbusRtuSerialSlave 和 QModbusRtuSerialMaster 重命名为 QModbusRtuSerialServer 和 QModbusRtuSerialClient。
Qt Serial Port
Qt WebChannel
- QWebChannel 属性变为可绑定。
- 现在可以配置 QWebChannel 的属性更新间隔。50ms 更新间隔保持为默认值。
- QWebChannel 现在支持 BINDABLE 属性的属性更新。但是,如果宿主属性不具有 NOTIFY 信号,客户端不提供通用回调机制。
- 来自不同线程中的对象信号现在已正确处理(QTBUG-51366)。
Qt WebEngine
- Qt Quick 的子模块已从 QtWebEngine 重命名为 QtWebEngineQuick。
- 包括 QWebEnginePage 在内的多个类从 QtWebEngineWidgets 移动到 QtWebEngineCore。
- 一些之前只能通过派生自 QWebEnginePage 访问的功能现在可以使用同步信号进行访问。
- 向 QWebEngineProfile 添加 Favicon API,以便查找特定 URL 的图标。
- 新的 QWebEngineLoadingInfo 类提供了关于加载成功或失败的更多细节。
Qt WebSockets
Qt WebView
Qt 6.2 功能更新
Qt Core 模块新增功能:
- 增加了QByteArrayView::compare()。
- 增加了QFlags::test(Any)Flag(s)方法。
- 增加了QHashSeed以控制哈希(种子现在是size_t);这将替代qGlobalQHashSeed和qSetGlobalQHashSeed。
- 增加了PRIxQTDATATYPE宏,以方便在没有转换或警告的情况下进行printf()- 类型的格式化。
- 许多属性可绑定。
- 图元簇现在可以处理表情符号。
- 在Windows上,UNC路径和网络共享现在的操作更一致。
- 容器(主要是QString、QByteArray及其视图)中的各种indexOf()和lastIndexOf()方法中,从“from”参数的start-offset处理现在更连贯。
- 与Qt 6.0版的QString::number()一样,对于有符号整数类型的QByteArray::number()重载在传递负整数和任何支持的基数时,返回带有负号和数字绝对值的文本,而不是将其强制转换为无符号类型(除10进制之外)。
- QCalendar现在支持从自定义后端的ID进行构造。
- QChar、QPoint和QPointF现在是基本类型,而不仅仅是可重新定位的。
- QCoreApplication::exit()现在,如quit()一样,成为一个槽(正如文档长期所声称的那样);QEventLoop和QThread也是如此。
- QDateTime现在在整个time_t范围内考虑时区(只要平台提供此类信息),而不是将范围人为限制在1970年至2037年之间。
- 实现了QFlags的价值类型行为,现在系统更加广泛地使用。
- 在构建C++20时,QList(因此也包括QVector)现在是连续迭代器,满足连续范围。
- QLocalSocket::waitFor*()方法现已支持在 Windows 上进行双工操作(Unix 上为原始方法)。
- 在QLockFile方法中添加了std::chrono重载,避免了 UTC 和本地时间之间不必要的转换。
- QStringList可以从char8_t(如有)构建。
- QThreadPool的线程优先级可配置;如果有名称,线程将共享线程池的名称。
- 大量的Bug修复、清理和文档改进。
Qt GUI 模块
- 向QImage添加了16位和32位浮点数表示的浮点图像格式。
- 将RGB图像转换为灰度图像,或在灰度图像上绘制RGB颜色现在进行γ校正,并生成输入色彩空间的亮度值。
- 现在在具有下划线、上划线和删除线的富文本跨度中支持CSS文本装饰颜色属性。
Qt Quick 模块
- 通过为 TableView 分配 ItemSelectionModel,支持选择 cell。
Qt Quick Controls 模块
- 增加了新控件 SelectionRectangle,可用于使用样式化选择矩形在 TableView 中选择单元格。
Qt Widgets 模块
- 增加了PM_LineEditIconSize,一个新的QStyle::PixelMetric枚举值,允许样式为QLineEdit中的图标定义默认大小。
- 新的QGraphicsSceneEvent::timestamp方法返回原始事件的时间戳(如适用)。
- QGraphicsSceneWheelEvent::phase、QGraphicsSceneWheelEvent::pixelDelta和QGraphicsSceneWheelEvent::isInverted分别返回原始QWheelEvent的相应属性。、
Qt Network 模块
- QSslSocket :在Qt 6.1中转换为类似插件的类的TLS后端已被移出QtNetwork并作为真正的插件实现。现在,多个TLS后端可以在运行时共存,例如OpenSSL和Schannel,或者OpenSSL和SecureTransport。
- QNetworkInformation :引入isBehindCaptivePortal,一个新属性,可以用来判断用户是否连接到带有captive portal的网络。
Qt QML模块
- 核心语言
- 添加了对可选链式调用的支持。
- 添加了as转换:这些主要有助于工具,但也可用于替换类似于 return (obj instanceof Item) ? obj.width : 42 的代码(使用 (obj as Item)?.width ?? 42 替换)。
- 为 QML 模块添加了公共的 CMake API:qt_add_qml_module()。
- 负责生成 qmldir 和 qmltypes。
- 如果插件仅注册类型,可以自动创建插件。
- 内置支持 linting 目标。
- QML 工具
- qmllint
- 为警告严重程度添加了细粒度设置;警告可以完全禁用,仅作为信息,或导致非零退出代码。
- 添加了一个设置文件(.qmllint.ini),用于在目录级别配置警告级别。可以使用 qmllint --write-defaults 生成默认设置文件。
- 现在可以通过注释在块中禁用警告;//qmllint enable/disable <warning-type2…>。
- 在对文件进行 linting 时,性能大大提高,尤其是在对包含大量导入的多个文件进行 linting 时。
- 添加了用于工具中的 JSON 输出支持。
- qmlformat
- qmlformat 现在使用我们新的 qmldom 库,应该会产生更好的输出。
Qt Quick 3D模块
- 添加了实例渲染支持,这是一种使用不同变换绘制相同对象多个实例的优化方式。
- 添加了3D粒子,一种用于在3D场景中添加粒子效果的API。这包括模型混合粒子的技术预览。
- 为3D场景中的2D项目添加了Qt Quick输入事件,包括在场景中和纹理中。
- 添加了从场景中任意点进行基于光线的拾取的API。
- 添加了RuntimeLoader,使得在运行时可以加载glTF2文件。
- 实现了视差遮挡映射:使得可以在不增加几何成本的情况下使用高度图。
- 对材质实现了深度绘制模式:使材料的深度渲染具有更精细的控制。
Qt Data Visualization模块
- 修复了背景渲染模式。
- RenderDirectToBackground_NoClear 被废弃,因为在Qt 6中不再允许选择不清除窗口。
- 许多小bug修复。
Qt Charts模块
- 为 QScatterSeries 和 QLegend 添加了更多可选择的标记形状。
- 为 QXYSeries 和 QLegend 添加了轻量级标记功能。这是一种轻量级的点渲染。
- 通过 QXYSeries 和 QBarSet 的方法调用新增了选择序列中的点的能力。
- 增加了为 QXYSeries 中选中的点设置颜色或使用自定义轻型标记的功能。
- 增加了为 QBarSet 中选中的柱状图设置颜色的功能。
- 增加了在 QXYSeries 中显示最佳拟合线的功能。
- 增加了自定义 QXYSeries 中各点外观的功能。此功能可设置每个点的可见性、标签可见性和大小。
- 为 QXYSeries 添加了一个 sizeBy() 方法,根据传递的值调整序列中点的大小。
- 为 QXYSeries 添加了一个 colorBy() 方法,根据传递的值和渐变调整序列中点的颜色。
- 添加了一个新的轴类 QColorAxis,支持 colorBy() 功能,显示颜色刻度。
- 增加了一项功能,可禁用轴中的标签截断。
- 通过缓存最近使用的文本边界,提高性能。
- 通过 setInteractive() 方法为 QLegend 添加交互式支持。启用后,可以通过双击将图例分离。分离后,图例可以拖动和调整大小,也可以通过将其拖出边缘重新附加到图表的一侧。
Qt for Python
- 在 Qt for Python 文档中添加了新的示例、教程和视频。
- 与 Python 3.10rc2 兼容。
- 添加了 QtDBus、QtNetworkAuth和QtBluetooth 模块。
- 添加了一个新的 Shiboken 功能,不透明容器,以避免将 C++ 容器复制到 Python 以使用它们。
- 现在可以在从源代码构建 PySide 时使用 qtpaths 代替 qmake。
- 为 QThreadPool 的某些方法添加了对std::function的支持。
- 添加了新的QML功能以及支持 qmlRegisterSingletonInstance。
平台更改
技术预览平台
Windows on ARM
- ARM64 版 Windows 加入作为技术预览平台。
- 作为构建目标所支持;还没有主机支持。
- 已知限制:
- 还没有 Qt WebEngine 支持;缺少官方 Chromium 支持。
- 还没有 SSL 支持;缺少官方 OpenSSL 支持。
桌面平台
macOS on Apple Silicon
- 作为目标和主机平台加入正式支持。
- Qt SDK 中的库作为通用二进制文件构建。
- 已知限制:
- 缺少 SSL 支持。
- 缺少 postgresql 和 odbc 数据库插件 (QTBUG-93204)。
- 缺少 JIT 支持 (QTBUG-93206)。
Wayland 客户端 on Linux
- 触摸板捏合手势现在通过 pointer-gestures-unstable-v1 协议从组合器发送时,将生成 Zoom 和 Rotate QNativeGestureEvents。这允许 Qt Quick PinchHandler 通过触摸板捏合手势操作。支持两、三或四指手势。类型为 Qt::PanNativeGesture 的手势可以通过三指或四指滑动生成。两指移动仍然会像以前一样生成 QWheelEvents。
移动平台
Android
- QtAndroidExtras 中 QtAndroid 命名空间下的一些方法(例如 sdkVersion() 和 context())已移至 QNativeInterface::QAndroidApplication。
- 在 QCoreApplication 中实现了新的权限 API。
- 将其余 QtAndroidExtras API 保留为 qtbase 中的私有 API,直到有跨平台替代方案(适用于 Intents、Services 等)。
- 移除了被 Android 不再支持的过时的 Ministro 代码。
- 简化了 AndroidManifest.xml,只包含与用户相关的标签,以帮助维护和减少杂乱。
- QCDebug() 及其相关函数现在在 Android logcat 中使用分类作为标签。
- 更新了 Android Gradle 插件至 4.1.3。
- 修复了与样式有关的非 SDK API 错误 (QTBUG-71590),尽管 Android 9+ 上的小部件的 Android Style 仍受影响 (QTBUG-96149)。
- 默认的 targetSdkVersion 设置为 30,以符合 Google Play Store 的要求。
- 使用的构建工具版本和平台版本升级至 30。
- 启用了 QDesktopServices 自定义处理程序,并允许您使用 Android 应用链接,例如。
- 添加了允许应用程序确定意图来源的信息,而无需创建自己的 QtActivity 扩展。
- 修复了 QML 模块的导入,并添加了多个 QML 根路径的可能性。
- 修复了 Android 上的 Vulkan 构建。
iOS
- 改进了 CMake 支持。
- 已知问题:
- 缺少默认启动屏幕故事板。
- 自定义库安装失败 (QTBUG-95381)。
嵌入式平台
- 适用于 Qt for Device Creation 许可。
Boot to Qt
- 更新了 Boot to Qt 堆栈以使用 Yocto 3.3 (Hardknott)。
- 将 Intel NUC10 (64bit 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 作为开发主机,硬件为树莓派 4。