Qt 6.7 新特性
Qt 6.7 新特性
Qt 核心模块
- 增加了 QSpan,Qt 对 C++20 std::span 的重实现。
- 增加了 Qt::strong_ordering、Qt::weak_ordering 和 Qt::partial_ordering 类,这是 C++17 兼容的
std::*_ordering
类的实现。 - 增加了方便在 Qt 类中实现关系操作符的宏。这些宏在 C++20 构建中提供了操作符 <=>(),并在 C++17 构建中回退到所有六个关系操作符。
- 将这些宏应用于 QDate、QTime、QDateTime、QTimeZone 和 qfloat16 类。
- 增加了新的类 QAtomicScopedValueRollback。
- 增加了 Qt::Key_micro 以最终取代重命名的 Key_mu:它是微符号 U+00B5,而不是希腊字母 mu,U+03BC 或 U+039C。
- QLocale 的 name()、bcp47Name() 和 uiLanguages() 现在允许调用者指定在名称中的标签之间使用的分隔符。
- QLocale 现在本地化了(只要可能)格式化日期中的时区部分。
- 两位数字年份的日期(和日期时间)解析现在允许调用者控制这些年份所在的世纪。
- QCalendar 现在有 matchCenturyToWeekday(),以支持两位数字年份的解析。
- QDateTime 现在接受 TransitionResolution 参数,允许调用者控制时区转换的解析方式。现在,时隙中日期时间的默认解析是有效的,但它的 time() 和可能的 date() 现在匹配 toMSecsSinceEpoch() 报告的结果,而不是所请求的结果。
Qt 图表模块
- 为 3D 图表的数据 API 不需要将每个数据项创建到堆内存中。
- 为 Bars3D、Scatter3D 和 Surface3D 图表增加了渲染到图像功能。
- 删除了一些冗余类,并将所需功能移动到其他地方。
- 枚举被设置为有限作用域。
- 其他一些架构和功能更改。
- 性能和视觉质量改进。
- 为 2D 图表添加了技术预览,它包含对条形图、折线图和散点图的初始支持。
Qt GRPC 模块
- 添加了使用拦截器自定义QtGRPC调用和流的特性的功能。现在您可以通过继承QGrpcClientInterceptor并重写所需的拦截方法来实现。
- 引入了QGrpcServerStream、QGrpcClientStream和QGrpcBidirStream类。这些类用于分别允许客户端、服务器和双向流调用。
注意:Qt GRPC模块处于技术预览阶段。
Qt GUI模块
- 添加了在Windows 10和11、macOS和iOS以及Android上提供对本地图标库访问的QIconEngine实现。
- 添加了两个新的事件类型QEvent::ChildWindowAdded和QEvent::ChildWindowRemoved,并提供了对应的QChildWindowEvent类来通知当子窗口被添加和移除时。
- 在所有平台上启用了加载变量应用程序字体(Windows平台需要DirectWrite或FreeType后端)。
- 对QFont进行了更新,增加了处理变量字体的新API。
- 新的QFont::Tag类型可以用于通过新的变量字体支持API和引入到Qt 6.6中的作为预览API的排版特性支持来指定轴。
Qt多媒体模块
- FFmpeg多媒体后端现在在Windows上以动态方式链接FFmpeg。通过在线安装程序提供预构建的FFmpeg二进制文件。现在使用FFmpeg后端的应用程序必须使用windeployqt将其二进制文件捆绑为安装程序的一部分。
- 可以使用新的MediaPlayer::autoPlay和Video::autoPlay属性来自动开始播放,当设置了媒体源时。
- 根据摄像机相对于其自然方向的实际旋转,为QCameraDevice增加了新的correctionAngle属性。该属性表示需要旋转以补偿摄像机物理旋转的旋转角度。
Qt网络模块
- 添加代表HTTP头部的QHttpHeaders类。
- 为QNetworkRequest和QNetworkAccessManager添加了对于使用std::chrono设置传输超时支持。
- 添加了QNetworkRequestFactory类(技术预览)。该类是一个方便的类,用于创建网络请求。
- 添加了QRestAccessManager和QRestReply类(技术预览)。这些类是为RESTful用例调整的方便包装器。
Qt OPC UA模块
- 增加新的QOpcUaHistoryEvent和QOpcUaHistoryReadEventRequest类以启用历史事件的读取。
- 添加了新的QOpcUaGenericStructHandler类和相关数据类,以支持通用OPC UA结构的解码和编码。
Qt Protobuf模块
- 增加了新的序列化器,它实现了基于
类进行JSON序列化和反序列化的功能。 - 在Qt Protobuf生成器中增加了对“可选”字段的支持。如果消息字段被标记为“可选”,则除了常规的字段方法外,还将有清晰的
和有 的方法。 - Qt Protobuf生成器生成的枚举字段现在保留了第一个字母的大小写。以前生成器将枚举字段名改为大写。
注意:Qt Protobuf模块处于技术预览阶段。
Qt QML模块
- 为QML语言服务器增加了新功能:格式化、语义和代码片段补全、重命名使用情况,以及通过QT_QML_GENERATE_QMLLS_INI设置CMake中的文件生成。
- 可以通过
pragma Translator
设置QML文件的翻译上下文。 - 现在可以在值类型上声明QML_CONSTRUCTIBLE_VALUE和QML_STRUCTURED_VALUE,并在QML中从这些类型的对象中构造对象。实际上,从Qt 6.5起就可以这样做了,但现在它已正式支持。
Qt Quick编译器
- 可以编译写入值类型属性的组合和函数到C++中。
- 可选链现在可以编译到C++中。
- for..in迭代现在可以编译到C++中。
Qt Quick模块
- 为加载文件添加了TextEdit.textDocument.source属性,为写入添加了save()和saveAs()函数,这可以取代文本处理用例中的XMLHttpRequest。
- 为TextEdit和TextArea添加了cursorSelection属性,以便检查和修改所选文本的属性。
- 更新了文本编辑示例,以演示这些功能。
- 添加了新的文本渲染器,可以更好地渲染非常大的文本。它可以通过将renderType设置为
Text.CurveRendering
来选择。 - 文本类获得了新的API以处理可变字体。
- 矩形现在可以在每个角上有不同的半径。
- 为将QWindows嵌入Qt Quick场景添加了初步支持,同时也在Window上设置了父属性,以便设置窗口的可视父对象。
- 将
的focusReason和focusPolicy属性移动到 - 中。
- 添加了QQuickRhiItem,作为现代的QQuickFramebufferObject替代品。这允许创建通过任何由Qt的渲染硬件接口支持的硬件加速图形API(即OpenGL、Vulkan、Direct3D或Metal)渲染3D图形的自定义QQuickItem对象。
- 添加了一个新的QQuickRenderControl示例,使用了QRhi,因此它是完全可移植的,并且可以与所有支持的3D API一起工作。这显示了如何以跨平台的方式将Qt Quick内容重定向到纹理中。
Qt Quick Controls模块
- 添加了以下具有强类型参数的函数
- pushItem()
- pushItems()
- popToItem()
- popToIndex()
- popCurrentItem()
- replaceCurrentItem()
- 与push、pop和replace功能不同,这些功能可以由QML编译器编译成C++。
Qt Quick Shapes模块
- 现在正式支持曲线渲染器及其相关属性preferredRendererType,它们不再被视为实验性。
- 为描述形状添加了pathHints属性。这可能被渲染器用来优化路径的处理和渲染。
- 形状现在具有基于形状边界框的隐式大小,并在布局中适当地定位。添加了fillMode、horizontalAlignment和verticalAlignment属性来修改形状的行为,当项被赋予与隐式大小不同的显式大小时。
- 添加了作为技术预览的工具svgtoqml。这是一个可以将SVG文件转换为QML代码的工具。目前这仍然被视为实验性,且仅支持Qt SVG所支持的部分。
Qt Quick Timeline模块
- QtQuick.Timeline.BlendTrees子模块添加了新的API,以便实现多个时间线动画的混合。
Qt Quick 3D模块
- QQuick3DRenderExtension是一个新类,用于实现应用端渲染扩展,这意味着用户现在可以扩展QtQuick3D的渲染管道,而无需修改QtQuick3D的引擎。与由QtQuick3D提供的新半公开API以及Qt渲染硬件接口(QRhi)相结合,现在可以将自定义渲染代码插入到QtQuick3D的渲染管道中,它可以是主渲染通道的一部分,也可以是独立渲染记录。独立渲染记录的结果可以通过QtQuick3D的类型(例如材质、效果等)支持的Texture类型供 preceding 扩展使用。
- QSSG类家族已文档化,并作为承诺具有有限兼容性的API提供。Qt空间场景图类提供了与QtQuick3D内部类型的交互访问和有用助手。QSSG类可以分为两大组。第一组提供了使用QRhi将自定义渲染插入到QtQuick3D场景所需的状态的访问,而第二组类提供了对QtQuick3D的可渲染对象及其访问,以及可以使用与QtQuick3D内部相同的基础结构修改、提取或重新渲染这些可渲染对象的助手。
- QSSGRenderExtension - 渲染扩展的后端实现。
- QSSGRenderContextInterface - QtQuick3D内部使用子系统的一个聚合类。
- QSSGRhiContext、QSSGRhiGraphicsPipelineState、QSSGRhiSamplerDescription - QRhi方便类,由QtQuick3D使用。
- QSSGFrameData - 渲染扩展使用的每帧数据。
- QSSGRenderHelpers,QSSGModelHelpers,QSSGCameraHelpers,以及QSSGRenderExtensionHelpers - 用于访问、设置和渲染QtQuick3D可渲染项的辅助类。
- CustomMaterial添加了新的sourceAlphaBlend和destinationAlphaBlend属性。
- 纹理对象添加了新的textureProvider和tilingModeDepth属性。
- View3D添加了新的explicitTextureWidth,explicitTextureHeight和effectiveTextureSize属性。
Qt Quick 3D 物理模块
- HeightFieldShape:支持通过image属性将QML Image类型用作源。
- ConvexMeshShape:支持通过geometry属性将QQuick3DGeometry用作源。
- TriangleMeshShape:支持通过geometry属性将QQuick3DGeometry用作源。
- PhysicsWorld:
- 添加了reportKinematicKinematicCollisions和reportStaticKinematicCollisions属性,分别用于启用运动-运动和静态-运动碰撞报告。
- 支持设置仿真线程数。
- PhysicsNode:添加了对碰撞过滤器的支持。现在可以通过指定节点的组ID来忽略它们之间的碰撞。
- PhysicsBody:通过simulationEnabled属性添加了对禁用身体模拟的支持。
Qt串行总线模块
- 向QCanDbcFileParser添加了一个方法,该方法可以启用使用除UTF-8以外的编码解析DBC文件。
Qt SQL模块
- 已移除已弃用的<qsql.h>头文件。请使用<qtsqlglobal.h>代替。
Qt WebEngine模块
- 添加了新的API QWebEngineWebAuthUXRequest和QML类型WebEngineWebAuthUXRequest来支持FIDO2用户验证和驻留凭证。
- 添加了新的API QWebEngineDesktopMediaRequest,以启用桌面屏幕捕获的源选择。
- 添加WebEngineDriver以自动跨浏览器测试网站。WebEngineDriver基于ChromeDriver。
- 添加了QWebEngineUrlRequestInfo::requestBody,以便使用QIODevice API访问请求体。
- 添加了设置forceDarkMode和ForceDarkMode,以自动渲染所有网络内容使用深色主题。
- 添加了信号QWebEngineProfile::clearHttpCacheCompleted和QQuickWebEngineProfile::clearHttpCacheCompleted。
Qt Widgets模块
- 添加了一个QRhiWidget类(处于技术预览中),它可以通过任何Qt的渲染硬件界面支持的硬件加速图形API渲染3D图形,即OpenGL、Vulkan、Direct3D或Metal。
- QCheckBox 添加了一个新信号 checkStateChanged,以类型安全的方式发出新的选中状态,值为 Qt::CheckState 枚举。
- QDateTimeEdit 新增了一个 timeZone 属性。
- 在运行 Windows 11 及以上版本的系统中,默认使用新的 Windows 11 小部件样式。此样式支持 Windows 暗黑模式。
Qt SVG 模块
- 支持 SVG 1.1 标准的一些元素,包括 Mask、Symbol、Marker、Pattern、Filter 以及 Filter 原语(feMerge、feColorMatrix、feGaussianBlur、feOffset、feComposite、feFlood)。
- 新增了 QtSvg::Options 标志,用于启用或禁用新元素的渲染。
- 为 QtSvg::Options 添加了 QSvgRenderer 和 QSvgWidget 的设置器和获取器。新功能默认启用。
工具
Qt Designer
- Qt Designer 现在将完全限定的枚举值写入
.ui
文件,以支持限定枚举值和 Qt for Python。读取这些值的支持已回滚到 6.6.1 和 6.5.4。
平台变更
桌面平台
Windows
- 添加 Windows 11 样式
- 添加了 QNativeInterface::QWindowsScreen,它提供了访问 Windows 上 QScreen 的底层句柄的能力。
macOS
- macOS 14 现在是受支持的构建和目标平台。
Linux 上的 Wayland 客户端
- 添加了 QNativeInterface::QWaylandScreen,它提供了访问 QScreen 的底层 Wayland 对象的能力。
WebAssembly
- 添加了拖放支持(拖放)。Qt 现在将在用户将内容拖放到应用窗口时发送拖放事件。
- OpenGL ES 3 / WebGL2 现在为默认设置,回退到 OpenGL ES2 / WebGL 1。
- Emscripten 版本更新到 3.1.50
移动平台
Android
- 重构了 Android 插件 Java 代码,包括
- 简化架构以及各种类之间的关系(例如,QtActivity、QtActivityLoader 和 QtActivityDelegate 之间的关系)。
- 将 QtLoader 类从公共绑定包中移除。
- 移除了反射的使用。
- 为 Android 添加了初步的子窗口支持,以与 Qt 及其其他 QPA 保持一致。因此,QScreen::grabWindow() 目前临时不受支持。
- 将 Android 14 设置为最大支持的平台版本,默认平台 SDK 和目标级别为 API 34。
- 将支持的 Android NDK 版本设置为 r26b (26.1.10909125) 和 JDK 为 17。
- 将移动类别的示例与 iOS 保持一致。
- 添加了 QNativeInterface::QAndroidScreen,它提供了访问 QScreen 的 Android 显示 id 的能力。
- 为使用 ndk-stack 与 androidtestrunner 一起提供了优雅地打印测试崩溃报告的支持。
- 已添加CMake变量QT_ANDROID_DEPLOYMENT_TYPE,以明确设置Android包的部署类型。
- 对Qt Android平台文档进行整体重写和更新。
- 引入功能以利用Qt在Android项目中的优势。
- Qt Quick View Android类,在Java或Kotlin代码中使用Qt Quick(技术预览)。
- Qt Tools for Android Studio,适用于Android Studio(技术预览)。
iOS
- iOS 17现在是一个支持的目标平台。
嵌入式平台
启动至Qt
- 支持添加了Yocto 4.3(Nanbield)。
- 支持ARM Linux开发主机。
- 目标镜像中包含Squish支持。
- 已更新目标硬件支持级别,包括Tier 3的新支持板。
- 亚马逊AWS EC2 ARM64
- NVIDIA Jetson AGX Orin开发者套件
- NXP i.MX8M Nano LPDDR4 EVK(替代DDR4 EVK变体)
- 高通机器人RB5开发者套件
- TI SK-AM69
VxWorks
- 作为技术预览添加了VxWorks 23.09支持。
构建系统更改
- Qt C++头现在包含了IWYU工具的元数据。
- CMake:现在您可以通过设置DEPLOY_TOOL_OPTIONS来调整qt_generate_deploy_app_script()、qt_deploy_runtime_dependencies()中*deployqt工具的参数。
- CMake:qt_add_library()现在考虑BUILD_SHARED_LIBS变量的值。如果定义了该变量,则在添加库目标时,其在qt_add_library()中检测库类型逻辑的优先级高于库类型。
- CMake:qt_standard_project_setup()允许您设置应用程序的本地UI语言以及UI翻译到的语言。然后qt_add_translations()调用会生成匹配给定语言的.ts和.qm文件,并为本地语言生成一个仅支持复数的.ts文件。
- CMake:现在您可以将多个目标传递给qt_add_translations()以从中提取翻译。或者,您可以让qt_add_translations()收集项目的所有目标(通过新的qt_collect_translation_source_targets()函数完成),并且可以有选择地从目录或目标级别排除不需要的目标。
- CMake:qt_add_translations()不再处于技术预览状态。
WebOS
- 验证显示,Qt 6.7与LG webOS OSE 2.25.0兼容(Qt for webOS)。
API更改列表
这些页面包含Qt 6.7中API更改的概述。
© 2024 Qt公司有限公司。此处包含的文档贡献者的版权所有。此处提供的文档根据自由软件基金会发布的GNU自由文档许可证版本1.3条款进行许可。Qt及其相关标志是芬兰及/或全球其他国家的Qt公司有限公司的商标。所有其他商标均为其各自所有者的财产。