Qt 6.5 新功能
Qt 6.5 中新增和恢复的模块
Qt 6.5 添加以下模块和工具
- Qt Quick Effect Maker - 一个用于创建高性能着色器效果的 Qt Quick 工具。
- Qt Quick Effects - 包含 MultiEffect 的模块,用于在 Qt Quick 项目 上应用一个或多个简单的图形效果。
- Qt Quick 3D Physics - 用于 Qt Quick 3D 的物理引擎。此模块不再处于技术预览阶段。
- Qt QML Core - 将各种 Qt Core API 公开到 QML 的模块。
技术预览中新增和恢复的模块
注意:无法保证 API 和 ABI 的稳定性。
- Qt Location 的 地图 将 2D 地图渲染到 Qt Quick 应用程序中。 MapView 包含 Qt Quick 输入处理器 以实现典型的交互功能(缩放、平移、倾斜)。
- Qt GRPC 支持使用基于从 protobuf .proto-规范生成的服务描述符的类与 gRPC 服务进行通信。
- Qt Protobuf 支持从 protobuf .proto-规范生成、序列化和反序列化基于 Qt 的类。
Qt 6.5 中的新增功能
Qt 核心模块
- QTimeZone 现在可以打包一个 Qt::TimeSpec,以及在相关的情况下,在一个轻量级的时间表示中包含一个偏移量,该表示统一了 QDateTime 和 QDate 的各种 API,这些 API 接收了一个 QTimeZone 或一个 Qt::TimeSpec 和偏移量。
- 引入了 应用程序权限 API,允许应用程序在用户同意之前检查或请求需要用户同意的功能的权限。
- 在通用跟踪格式(CTF)中引入了新的跨平台跟踪后端。
- QBindable 现在可以从任何具有 NOTIFY 信号的性质构建。这使得您可以将现有的、不可绑定的属性与 可绑定属性 集成。
- 现在推荐使用 OUTPUT_SCRIPT 参数的 CMake 函数 qt_generate_deploy_app_script。传递旧 FILENAME_VARIABLE 已弃用。
Qt GUI 模块
- 重新引入了类QWindowsMimeConverter和QUtiMimeConverter,用于在Windows、macOS和iOS平台的特定格式中处理拖放和剪贴板数据。
- QVulkanInstance现在默认启用Vulkan可移植物理设备。这对于在苹果平台上与较新版本的MoltenVK版本协同操作是必需的。增加了一个NoPortabilityDrivers标志,允许您选择不这样做。
- 现在Vulkan渲染基础设施使用VK_EXT_debug_utils而不是已弃用的VK_EXT_debug_report和VK_EXT_debug_marker。
- QTextLayout::glyphRuns()现在可以在请求时返回与每个符号对应的字符串索引。通过新的函数QGlyphRun::stringIndexes提供。
- 复选框列表项现在可以以HTML和Markdown方式读取和写入,包括转换。
- 添加了QGuiApplication::setBadgeNumber()函数,以便向用户提供有关未读消息数量的反馈等。徽章将叠加在macOS中的应用程序图标上、iOS的首页图标上或在Windows的任务栏上。
Qt Quick模块
- TableView现在支持使用编辑代理编辑单元格。
- TableView现在支持使用鼠标调整行和列的大小。
- TableView现在支持显式设置行和列的大小。
- TableView新增了一个信号
layoutChanged()
。此信号可用于重新定位叠加项等操作。 - TableView现在支持多选。
- 添加了在QSGMaterial中指定单独的RGB和alpha混合因子的支持。
- Qt Quick场景图现在根据平台和使用的三维图形API自动使用持久、基于磁盘的图形管线或中间格式着色器字节的缓存。这预计将减少后续应用程序运行中创建图形管线所花费的时间。此外,QQuickGraphicsConfiguration提供了对写入和从何处加载数据的显式控制。这使得可以用于为应用程序或设备提供预加载的缓存文件的高级用例,这也加速了第一次启动。
- PinchHandler有新的scaleAxis和rotationAxis组合属性,提供包括新出现在所有处理器轴组中的
activeValue
属性在内的多个新值。它还得到了DragHandler已有的activeTranslation和persistentTranslation属性。 - DragHandler的
xAxis
和yAxis
具有新的activeValue属性。 - PinchHandler 的 activeScale (之前称为
scale
)不再受限于 minimumScale 和 maximumScale 范围内:这些限制仅适用于 persistentScale。同样,activeRotation (之前为rotation
)也不再受限于 minimumRotation 和 maximumRotation 范围。这些限制以相同的方式应用于触摸板捏合手势和触摸屏。 - TapHandler::exclusiveSignals 现在允许您使 singleTapped 和 doubleTapped 信号排他性。
Qt Labs 动画模块
- BoundaryRule 现在有一个 returnedToBounds 信号。
Qt Quick 控件模块
- TreeViewDelegate 支持编辑树节点
- 材质风格已更新至 Material 3。
- iOS 风格已完成
Qt 测试模块
- 添加了 QTest::currentTestResolved(),如果测试失败或跳过,则返回 true。这可以用作从辅助函数返回时测试的条件,以替代 QTest::currentTestFailed()。
- QTest::mouseRelease() 和 mouseClick() 现在可以用来测试双击,通过指定一个真实的时间戳延迟,如果您需要检查事件之间的中间状态。 mouseDClick() 在其他情况下更为方便。
Qt Widgets 模块
- QKeySequenceEdit 现在有两个新属性:maximumSequenceLength 允许应用程序控制键序列的长度。 finishingKeyCombinations 定义结束记录的键组合。
- 向QOpenGLWidget添加了立体渲染支持,也适用于任何由QOpenGLWidget视图支持的QGraphicsView。与QOpenGLWindow不同,或在Qt 5和4中已删除的QGLWidget,QOpenGLWidget需要显式支持此功能,并具备相应的支持API,因为在这种情况下,应用程序不会直接将渲染输出到本地窗口,因此不像QOpenGLWindow那样拥有相同程度的对活动绘图缓存的控件。
Qt 定位模块
- 引入了SatelliteSource - 一个用于QGeoSatelliteInfoSource的QML API。
Qt 串行总线模块
- 引入了QCanSignalDescription、QCanMessageDescription和QCanUniqueIdDescription类。这些类用于提供一套规则来编码和解码CAN总线消息。
- 引入了QCanFrameProcessor类。此类可以将接收到的QCanBusFrame解码为键值对的映射,并从键值对映射中组合QCanBusFrame。
- 引入了QCanDbcFileParser类。此类用于解析DBC文件,生成消息描述,这些描述可以稍后在QCanFrameProcessor中使用。
所有新类均为试验性,可能随时更改。
Qt 网络模块
- 引入了QHttp1Configuration。该类可用于配置在HTTP 1中每个主机使用的最大连接数(默认:6)。
- QNetworkRequest在Qt for WebAssembly中获得了UseCredentialsAttribute属性,使得底层的XMLHttpRequest能够使用withCredentials。
Qt QML模块
- 向QQmlApplicationEngine和QQmlComponent添加了API,用于通过它们的模块URI和类型名加载/创建QML元素。与基于URL的函数相比,这还可以与C++类型和内联组件一起使用。
- QQmlListProperty属性现在更像数组,增加了对map()、reduce()和forEach()等方法的支持。同样适用于其他序列类型,如QList<int>及其类似类型。
- 扩展了qmltc,以支持更多的qml构造函数,特别是翻译绑定、内联组件、单例以及对C++定义的信号的手动处理程序。
- QML脚本编译器可以处理更多的结构。特别是:
- console.log()及其相关项
let
和const
- qsTr()及其相关项
- 字符串的arg()
- 所有剩余的位和移位运算符
- 指数运算符
- 使用新的环境变量
QML_DISK_CACHE
可以以更细致的方式控制QML磁盘缓存。 - 添加了新的公共CMake API。
- 引入了用于设置更好的默认资源前缀的Qt CMake策略。如果将QTP0001策略设置为
NEW
,QML引擎将始终能够在资源文件系统中找到您的QML模块。
- 引入了用于设置更好的默认资源前缀的Qt CMake策略。如果将QTP0001策略设置为
- qt_generate_deploy_qml_app_script CMake函数现在首选接受一个名为OUTPUT_SCRIPT的参数。传递旧 的FILENAME_VARIABLE已被弃用。
Qt Quick 3D模块
- 为模型添加了自动细节级别(LOD)支持。这允许在资产导入时生成简化版本的网格,然后在渲染时自动选择合适的级别。
- 添加了对显式细节级别(LOD)的支持,用于根据摄像机距离控制模型的透明度。
- 添加了ExtendedSceneEnvironment,内置景深、色调分级、发光、晕影、镜头光晕等效果。这些效果一起执行,比单个独立后处理效果效率更高,每个效果可能需要一到多个渲染通道。
- 增强了DebugView,增加了渲染统计信息、活动网格和纹理资产列表、实时渲染通道信息,以及用于交互式切换设置的控制,如线框模式和从DebugSettings的材质覆盖。
- 添加了DebugSettings,通过SceneEnvironment可用,允许以编程方式控制设置,如线框模式和对基于物理材质的材质的覆盖。
- 添加了InfiniteGrid,在水平平面实现无限网格,边缘渐变。
- 添加了通过SceneEnvironment提供的简单雾支持。当启用时,在渲染场景中的模型时应用深度或高度雾效果。
- 在使用实例渲染时改进了拾取。
- 为PrincipledMaterial和SpecularGlossyMaterial添加了顶点颜色支持。
- 反射探针:添加了对使用提供的立方体贴图纹理而不是渲染场景的支持。
- 增强后处理效果,以便在运行时对着色器源文件URI的变化做出适当反应。
- 添加了持久、基于磁盘的缓存运行时生成的材质着色器数据。预计将提高应用程序启动和视图更改时间。
Qt WebView模块
- 添加了WebViewSettings来配置一些常见的WebView功能。
Qt Multimedia模块
- ffmpeg媒体后端,6.4中作为技术预览,现在成为macOS、Windows、Android和Linux的标准后端,Yocto发行版除外。原生后端仍然可用,但支持有限。
- 引入了新的视频输入类型QScreenCapture类。可以使用QScreenCapture将视频直接从QMediaCaptureSession传输到输出,例如QMediaRecorder或QVideoWidget。屏幕捕获功能仅在ffmpeg媒体后端中可用。
平台更改
WebAssembly
- 在Qt在线安装器中添加了具有多线程功能的二进制软件包。
- 添加了对文件系统访问API的支持。如果浏览器支持,文件对话框调用(如QFileDialog::getOpenFileContent()和QFileDialog::saveFileContent)将使用此API。
- 添加了对本地字体访问API的支持。Qt将使用支持此API的浏览器上的本地字体。
- 将视频播放和摄像头支持的技术预览添加到Qt Multimedia。
- 为WebAssembly SIMD添加了配置选项:-feature-wasm-simd128
- 为WebAssembly异常添加了配置选项:-feature-wasm-exceptions
- 发布了Qt Web Utils,其中包含实用函数和Qt在Web上使用的示例。
- QTest for WebAssembly现在默认使用emrun。一个专用的WebAssembly脚本驱动自动测试的执行。
桌面平台
Windows
- 可以将环境变量QT_WIN_DEBUG_CONSOLE设置为在控制窗口中查看从命令行启动的GUI应用程序的stdout/stderr消息。将其设置为
new
或attach
。
macOS
- 为QMessageBox和QErrorMessage添加了本地后端。
Linux上的Wayland客户端
- 现在支持fractional_scale_v1协议,该协议适用于建议客户端分数缩放因子的合成器。
移动平台
Android
- 将Gradle更新到8.0,将Android Gradle Plugin (AGP)更新到7.4.1(需要11或更高版本的JDK)。
- 将NDK更新到r25b(25.1.8937393)。
- 支持版本列表现在包括Android 8.0(API 26)或更高版本。
- 将最低平台构建SDK版本提升到33(QT_ANDROID_API_VERSION)。
- 通过Qt文件/目录工具支持对内容方案URI的更多操作。
- 针对Android scoped storage更新了QStandardPaths的修复和文档更新。
- 从Qt而不是Android系统中打印Qt JNI异常。
- 修复了对APK签名方案v2的支持。
iOS
- 为QColorDialog和QFontDialog添加了本地实现。
嵌入式平台
启动到Qt
- Boot to Qt堆栈已更新为使用yocto 4.1.2(langdale)。
- 支持使用基于Docker的工具链的macOS主机。
- 更新了目标硬件的支持水平,现在有多个支持级别适用于特定的硬件和OS组合。
API更改列表
这些页面包含Qt 6.5中API更改的概述
© 2024 The Qt Company Ltd. 本文档中的贡献文档的版权归各自所有者所有。本提供的文档受Free Software Foundation发布的GNU自由文档许可协议版本1.3的条款许可。Qt及标志是The Qt Company Ltd.在芬兰及/或其他国家的商标。所有其他商标均为其所有者的财产。