Qt 6.6 新特性

Qt 6.6 新增及恢复的模块

Qt 6.6 添加了以下模块和工具

技术预览中新增及恢复的模块

注意:API 和 ABI 稳定性无法保证。

Qt 图表模块

Qt 图表目的是替代 Qt 数据可视化模块。它使用 Qt Quick 3D 作为渲染引擎,为支持本机图形后端提供支持,而不是像 Qt 数据可视化那样依赖于 OpenGL 2.1。

该模块将提供 Qt 数据可视化的大部分功能,如果有的话。某些高级功能可能在技术预览版中不完整。

Qt 6.6 新特性

Qt 核心模块

  • 添加了Q_NODISCARD_CTOR 宏,用于标记不应该被丢弃的构造函数。该宏在支持该宏的编译器中解析为 [[nodiscard]],在不支持该宏的编译器中不起作用。
  • 为以下 Qt 容器添加了QVarLengthArrayQListQByteArrayQStringassign() 重载,这些函数是在不增加现有 capacity() 的情况下重新分配新数据的一种方便方式。
  • 您可以通过在 CMakeLists.txt 中指定 QT_DISCARD_FILE_CONTENTS 源文件属性来省略任何添加到资源文件系统的文件的 内容。将 nodes 文件保留。当手动编写 .qrc 文件时,您可以通过将 file XML 节点的 empty 属性设置为 true 来达到相同的效果。
  • QFileInfo 新增了返回原始路径的成员函数 readSymLink() 以及用于与时间戳相关函数的新重载,包含了 QTimeZone
  • 可以使用结构体 QProcess::UnixProcessParameters 和枚举 QProcess::UnixProcessFlag 中的 QProcess::setUnixProcessParameters() 成员函数在新的Unix特定的子进程设置和参数中进行修改,如关闭多余的文件描述符。
  • 新类 QNativeIpcKey 保存了由 QSharedMemoryQSystemSemaphore 使用的本地密钥,为 Apple 平台上的沙箱应用提供了更好的支持。更多信息请参见Native IPC Keys
  • 大多数与时间段相关的Qt API已从std::chrono迁移到相关数据类型。
  • QXmlStreamReader::hasStandaloneDeclaration() 报告文档是否有显式的独立声明。

Qt GRPC 模块

  • 新增了QGrpcChannelOptionsQGrpcCallOptions。这些是新方法,用于将选项传递给通道和调用。
  • 新增了QGrpcMetadata,以便将额外的元数据传递给调用。
  • 集成了对自动生成的QtGRPC类的QML类型支持。

Qt GUI 模块

  • 新增了QFont::setFeatures(),用于直接访问字体中的OpenType功能。
  • QPalette现在有一个默认使用系统强调色的强调()颜色条目。
  • QRhi类家族现在已全部文档化,并作为API提供,承诺有限的兼容性。Qt渲染硬件接口是一个3D图形API和着色语言抽象层,由Qt Quick和Qt Quick 3D等模块用于实现跨平台、可携带的渲染引擎和材质系统,可在Direct 3D 11/12、Vulkan、Metal、OpenGL和OpenGL ES上运行。希望执行自己的低级渲染的应用程序现在可以使用QRhi和相关类来增强一个Qt Quick场景,渲染到一个QWindow,在纹理中进行离屏渲染,或将GPU计算工作负载分发。在之前Qt 6版本中,QRhi类是完全私有的,并且文档并未作为标准Qt文档集的一部分提供。现在它们被处理得类似于QPA(QPlatform*)类,这意味着它们形成了一组特殊的类,这些类不提供所有标准模式和源/二进制兼容性承诺,但依旧可供中级/高级应用开发者使用。现在QRhi API的文档已包含在标准Qt文档中。还介绍了rhiwindow示例
  • QRhi添加了Direct 3D 12后端。这目前不会影响任何应用程序,因为Qt Quick和QQuickWidget的默认后端选择仍然是Direct 3D 11在Windows上,并且预计这在可预见的未来也不会改变。新的D3D12后端目前应被视为实验性的,主要用于需要通过Direct 3D 12简化与自身或某些外部组件的渲染或计算引擎交互的应用程序。
  • Qt 6应用程序现在可以支持定制的或特定于平台的剪贴板格式,使用新的QUtiMimeConverter类(针对macOS)和QWindowsMimeConverter(针对Windows)。这些类是Qt 5中QMacPasteboardMime和QWindowsMime类型的统一版本。有关适配现有实现的帮助,请参阅移植指南
  • QTextListFormat::setStart() 允许使用除1以外的索引开始文本列表。

Qt位置模块

  • 现在地图项的渲染更正确,包括环绕地球或包含空洞的项。
  • 现在的地图项可以采用不同的参考表面来渲染。枚举类型 QLocation::ReferenceSurface 提供了选项 MapGlobe,可以在项类型中使用 referenceSurface 属性来控制项是在平面上渲染还是遵循地球的曲率。
  • 当按住 Shift 键时,可以使用鼠标滚轮来改变 方位角;当按住 Control 键时,可以改变 倾斜角度

Qt 多媒体模块

  • Qt 多媒体库不再请求音频或视频权限,而只是检查它们是否已提供。客户端应用程序必须使用 C++QML 权限 API 来请求权限。
  • 新的 QWindowCapture 类增加了对在 QMediaCaptureSession 中捕获单个桌面应用程序窗口的视频的支持。录制的视频可以被导出到任何类型的视频输出,例如到 QMediaRecorder 或到 QVideoWidget。窗口捕获仅通过 FFmpeg 后端支持。
  • QMediaRecorder 已扩展了属性,以提供更好的对视频质量、分辨率和比特率的控制。

Qt PDF 模块

Qt 定位模块

  • Qt 定位库不再请求位置权限,而只是检查它们是否已提供。客户端应用程序必须使用 C++QML 权限 API 来请求权限。

Qt Protobuf 模块

  • 通过在 *.proto 架构中作为 Qt Core 和 Qt GUI 类型的部分启用。
  • 集成了对自动生成的 QProtobufMessage 类的 QML 类型的支持。
  • 将自动生成的 QProtobufMessage 类迁移到了隐式共享数据。这使得可以从 QML 上下文中按值访问消息类型而无需进行大量的复制。
  • 增加了对 google.protobuf.Any 类型的 Qt Protobuf Well-Known Types 支持。
  • 集成了对 oneof 类型,在 protobuf 中的类似联合类型,不支持包含值的支持。

Qt 蓝牙模块

  • Qt 蓝牙库不再请求蓝牙权限,但只检查它们是否已提供。客户端应用程序必须使用 C++QML 权限 API 来请求权限。
  • Qt现提供了原生的128位无符号整型类型quint128。在支持此特性的平台上,QBluetoothUuid(quint128) 构造函数和QBluetoothUuid::toUInt128() 方法现在使用该类型代替以前Qt版本使用的自定义结构体。只要您的代码将quint128视为一个不可见类型的结构,变更将保持源代码和二进制兼容,但遇到问题时请考虑使用新的基于QUuid::Id128Bytes的重载。不支持128位整型类型的平台(如MSVC)仍使用Qt蓝牙中的自定义结构体。

Qt QML模块

  • 添加了通过QML管理应用程序权限的支持。Qt QML Core模块通过一组可用于跨平台方式检查或请求权限的权限类型,将Qt C++应用程序权限功能暴露给QML。有关更多信息,请参阅QML应用程序权限
  • XMLHttpRequest对象现在更新了两个新特性,以便更接近现代浏览器。已添加responseURL属性,用于确认是否发生了任何重定向。同样,添加了overrideMimeType方法,可用于使XMLHttpRequest对象根据特定的MIME类型解析响应,而不是响应内容类型头中的MIME类型。
  • QML语言服务器已初步支持“前往定义”和“查找使用”功能。它还支持完整的文档格式化。
  • 现在可以使用插件扩展qmllint。插件API目前处于技术预览版。

Qt Quick模块

  • 添加了font.features属性,允许直接访问字体中的OpenType特性。
  • TableView有一个selectionMode属性,用于控制是否可以选择单个或多个单元格。
  • TreeView有一个rootIndex属性,用于从模型中仅显示子树。
  • AnimatedImage现在支持sourceSize属性。
  • 环境变量QT_QUICK_FLICKABLE_WHEEL_DECELERATION允许您自定义使用"点击"鼠标滚轮后的减速。默认情况下,现在已关闭加速,以便滚动距离与"点击"次数成比例(除非平台提供自己的加速);但如果设置一个小于15000的值,则可以恢复旧的行为。flickDeceleration属性现在仅适用于触摸滑块操作。
  • 大多数属性现在为FINAL,意味着它们不能再通过声明具有相同名称的新属性来覆盖。如果覆盖了FINAL属性,则将发出警告。我们建议用户将此类属性重命名以避免意外行为变化。
  • QQuickWindowQQuickRenderControlQSGTexture中添加并公开了多个与QRhi相关的函数。现在查询正在屏幕或离屏Qt Quick渲染中所使用的QRhiQRhiSwapChainQRhiCommandBuffer得以简化。之前由于依赖QRhi*类而隐藏在文档中的某些函数现已被暴露。向QQuickWindow添加了createTextureFromRhiTexture(),作为createTextureFromImage()的对应函数。
  • 更新场景图示例:增加了rhiunderqml,用新的、可移植的rhitextureitem示例替换了遗留下来的、只支持OpenGL的fboitem示例,并更新了customrendernode示例。这共同展示了三种用自定义低级2D/3D渲染(覆盖、插入分镜、通过纹理渲染的项,以及带有QSGRenderNode的项)扩展Qt Quick场景的方法。
  • 为自动在渲染路径之前简化路径添加了Path::simplified属性。这反映了QPainterPath::simplified()函数。
  • 增加了对QQuickWindow渲染的GPU时间戳的收集支持。当通过QQuickGraphicsConfigurationsetTimestamps()或相应环境变量启用时,GPU端的时间将在启用日志类别如qt.scenegraph.time.renderloop时打印的调试输出中显示,并在Qt Quick 3D的DebugView项中显示,补充了CPU端的时间。目前支持Direct 3D 11、Metal和Vulkan(假设底层的Vulkan实现支持时间戳查询)。其余3D API的支持将在未来的版本中引入。

Qt Quick Controls Module

  • SpinBox添加了live属性。这控制当用户编辑displayText时,是否更新value
  • 向Dial添加了wrapped信号。当转盘翻转时,即从最大值跳转回最小值或相反时,会触发此信号。
  • 向Dial添加了startAngleendAngle属性。这些属性控制转盘的起始和结束角度(以度为单位)。

Qt Quick Layouts Module

Qt Quick Shapes Module

  • 添加了实验性的曲线渲染后端,它将以比默认几何渲染器更高的质量渲染曲线,并在不使用MSAA的情况下应用抗锯齿。可以通过Shape::preferredRendererType属性进行选择。

Qt Quick 3D 模块

Qt Sql 模块

  • 添加了对Mimer SQL的插件。
  • MySQL/MariaDB获得了新的连接选项MYSQL_OPT_PROTOCOL、MYSQL_SHARED_MEMORY_BASE_NAME、MYSQL_OPT_TLS_VERSION、MYSQL_OPT_SSL_MODE。
  • ODBC插件现在在QSqlError中返回所有原生错误代码。
  • QSqlQuery增加了两个新函数bindValueName()/bindValueNames()。

Qt TextToSpeech 模块

QTextToSpeech类获得了一些新技巧,这些技巧对所有引擎都可用。

  • 应用程序可以通过enqueue将多个文本片段添加到合成引擎中。
  • 新信号aboutToSynthesize会在文本片段被合成的瞬间发出。
  • 现在可以用一组标准来选择由引擎提供的某个声音变得更容易,通过findVoices成员函数。此外,qml代码可以使用VoiceSelector类型作为附加属性。

并非所有新功能都对每个引擎都可用。应用程序可以使用新功能Capabilities标志和engineCapabilities属性来检查当前使用的引擎支持的功能。

Qt WebEngine 模块

Qt Widgets 模块

  • QWidget 新增了一个 setTabOrder() 重载,该重载接受一个初始化列表,允许通过单个调用设置整个链。
  • QMessageBox::Option 提供了一个控制每个消息框是否应使用原生消息框的机制。

平台更改

桌面平台

macOS

  • 构建面向 macOS 的用户项目或 Qt 本身现在至少需要 CMake 版本 3.21.1。
  • QMessageBox::setCheckBox() 现在使用原生消息框时应受到尊重。
  • QFileDialog 再也不会不必要地触发权限对话框。

移动平台

Android

  • 在使用 QDesktopServices::openUrl() 时增加了对 FileProvider 的支持。
  • 默认添加了 AndroidX(FileProvider 的依赖项)。
  • 引入了针对 Android 特定目标属性的 QTP0002 CMake 政策。
  • 更新了在 Android 上受支持的示例列表。
  • Android 13 是受支持的最高版本
  • 更新了 Gradle 到版本 8.3.0。
  • QFileDialog 现在将接受所有提供的名称过滤器,而不仅仅是选定的一个。
  • 将 Android 目标 SDK 级别更新为 33,以符合 2023 年 Play 商店的要求。

iOS

  • 增加了对 QWindow::setMask() 的支持,用于遮罩渲染和输入。
  • 增加了对外国窗口的支持,以便将 UIView 嵌入到 QWindows 中。

嵌入式平台

启用到 Qt

  • 支持 Yocto 4.2(mickledore)。
  • 更新了针对目标硬件的支持级别,增加了新的支持板。
    • 为 NXP i.MX 93 板增加了 Tier 1 支持。
    • 为 Jetson AGX Xavier 板增加了 Tier 1 支持。
    • 为 NXP i.MX 8QuadXPlus 板增加了 Tier 3 支持。
    • 为 Toradex Apalis iMX8 板增加了 Tier 3 支持。
  • Toradex 和 ST 目标现在使用最新的 Yocto LTS 版本(kirkstone)。

© 2024 The Qt Company Ltd。此处包含的文档贡献的版权归其各自的所有者。此处提供的文档是根据自由软件基金会发布的 GNU 自由文档许可版 1.3 许可的。Qt 和相应的标志是 The Qt Company Ltd. 在芬兰和其他国家/地区(包括全球)的商标。所有其他商标均为其各自所有者的财产。