Qt 6.6 中的新功能
Qt 6.6 中新增和恢复的模块
Qt 6.6 新增了以下模块和工具:
技术预览版中的新模块和恢复模块
注意: 不保证 API 和 ABI 的稳定性。
Qt Graphs 模块
Qt Graphs是Qt Data Visualization 的替代模块。它使用Qt Quick 3D 作为渲染引擎,为本地图形后端提供支持,而不是像Qt Data Visualization 那样依赖 OpenGL 2.1。
该模块将提供Qt Data Visualization 的大部分(如果不是全部)功能。在技术预览版中,某些高级功能可能还不完整。
Qt 6.6 中的新功能
Qt Core 模块
- 添加了Q_NODISCARD_CTOR 宏,该宏应应用于标记构造函数 nodiscard。该宏在支持它的编译器上解析为
[[nodiscard]]
,而在其他编译器上不起作用。 - 为以下 Qt 容器添加了
assign()
重载:QVarLengthArray,QList,QByteArray 和QString 。这些函数是在重用现有capacity()
的同时分配新数据的便捷方法。 - 通过在 CMakeLists.txt 中指定 QT_DISCARD_FILE_CONTENTS 源文件属性,您可以省略任何添加到资源文件系统的文件内容。文件节点将被保留。当手动写入
.qrc
文件时,您可以通过将file
XML 节点的empty
属性设置为true
来达到同样的效果。 - QFileInfo 新的 () 成员函数可返回原始路径,而与时间戳相关的函数则可使用 进行新的重载。readSymLink QTimeZone
- QProcess::UnixProcessParameters 结构和QProcess::UnixProcessFlag 枚举可用于新的QProcess::setUnixProcessParameters() 成员函数,以修改子进程的 Unix 特定设置和参数,如关闭无关的文件描述符。
- 新的QNativeIpcKey 类持有QSharedMemory 和QSystemSemaphore 使用的本地密钥,为苹果平台上的沙盒应用程序提供更好的支持。更多信息,请参阅本地 IPC 密钥。
- 大多数处理时间跨度的 Qt API 已从
std::chrono
移植到相关数据类型。 - QXmlStreamReader::hasStandaloneDeclaration() 报告文档是否有明确的独立声明。
Qt GRPC 模块
- 已添加QGrpcChannelOptions 和QGrpcCallOptions 。这些是向通道和调用传递选项的新方法。
- 已添加 QGrpcMetadata,用于向调用传递附加元数据。
- 为自动生成的 QtGRPC 类集成了 QML 类型支持。
Qt GUI 模块
- 添加了 QFont::setFeatures() 以直接访问字体中的 OpenType 特征。
- QPalette 现在,QFont::setFeatures() 包含一个 () 颜色条目,默认使用系统的强调色。accent
- QRhi 系列的类现在都有完整的文档说明,并作为 API 提供,同时提供有限的兼容性承诺。Qt 渲染硬件接口(Qt Rendering Hardware Interface)是一个 3D 图形 API 和着色语言抽象层,被Qt Quick 和Qt Quick 3D 等模块用于实现跨平台、可移植的渲染引擎和材质系统,可在 Direct 3D 11/12、Vulkan、Metal、OpenGL 和 OpenGL ES 的基础上运行。希望执行自己的底层渲染而不直接依赖潜在的特定平台 3D API 和着色语言的应用程序现在可以使用QRhi 和相关类来增强Qt Quick 场景、渲染到QWindow 、执行屏幕外渲染到纹理或调度 GPU 计算工作负载。在以前的 Qt 6 版本中,QRhi 类是完全私有的,文档也没有作为标准 Qt 文档集的一部分提供。现在,这些类的处理方式与 QPA(QPlatform*)类类似,这意味着它们构成了一组特殊的类,这些类不提供公共 Qt API 的所有标准模式和源代码/二进制兼容承诺,但仍可供中级/高级应用程序开发人员使用。QRhi API 的文档现在是标准 Qt 文档的一部分。还引入了rhiwindow 示例。
- 为QRhi 添加了 Direct 3D 12 后端。这目前不会影响任何应用程序,因为Qt Quick 和QQuickWidget 的默认后端选择仍然是 Windows 上的 Direct 3D 11,预计在可预见的将来也不会改变。新的 D3D12 后端目前应被视为试验性的,它主要适用于需要 Qt 通过 Direct 3D 12 执行渲染的应用程序,以简化与应用程序自身或某些外部组件的渲染或计算引擎(需要 D3D12)的互操作。
- Qt 6 应用程序现在可以使用新的QUtiMimeConverter (适用于 macOS)和QWindowsMimeConverter (适用于 Windows)类来支持自定义或特定平台的剪贴板格式。这些类是 Qt 5 中 QMacPasteboardMime 和 QWindowsMime 类型的统一版本。有关调整现有实现的帮助,请参阅移植指南。
- QTextListFormat::setStart() 允许文本列表以 1 以外的索引开始。
Qt Location 模块
- 现在可以更正确地呈现地图项目,包括那些环绕地球或包含孔洞的项目。
- 现在可以使用不同的参考表面来呈现地图项。QLocation::ReferenceSurface 枚举提供了
Map
和Globe
选项,可与项目类型中的referenceSurface 属性一起使用,以控制项目是在平面地图上渲染,还是按照地球曲率渲染。 - 鼠标滚轮可以在按住 Shift 修改器时改变bearing ,或在按住 Control 修改器时改变tilt 。
Qt Multimedia 模块
- Qt Multimedia 库不再请求音频或视频权限,而只是检查是否提供了这些权限。客户端应用程序必须使用C++ 或QML权限 API 请求权限。
- 新的QWindowCapture 类增加了对捕获QMediaCaptureSession 中单个桌面应用程序窗口视频的支持。录制的视频可定向到任何类型的视频输出,例如到QMediaRecorder 或QVideoWidget 。窗口捕获仅支持 FFmpeg 后端。
- QMediaRecorder FFmpeg 已扩展了属性,可更好地控制视频质量、分辨率和比特率。
Qt PDF 模块
- 新的QPdfLinkModel 类提供了指定页面上链接的几何形状和目的地。
- QPdfDocument::pageModel() 实现了Qt::DecorationRole ,可按需渲染页面缩略图。
- 新的QPdfPageSelector 类是一个专门的QSpinBox ,用于在基于 widget 的 PDF 浏览器中选择页面。
Qt Positioning 模块
Qt Protobuf 模块
- 启用使用某些Qt Core 和Qt GUI 类型作为 *.proto 模式的一部分。
- 为自动生成的QProtobufMessage 类集成 QML 类型支持。
- 为自动生成的QProtobufMessage 类迁移到隐式共享数据。这允许从 QML 上下文按值访问消息类型,而无需制作大量副本。
- 为google.protobuf.Any类型添加了Qt Protobuf Well-Known Types 支持。
- 集成了对oneof类型的支持,这是 protobuf 中的一种类似 union 的类型,无需包含值。
Qt Bluetooth 模块
- Qt Bluetooth 库不再请求蓝牙权限,而只检查是否提供。客户端程序必须使用C++ 或QMLpermissions API 请求权限。
- Qt 现在提供了本地 128 位无符号 int 类型 quint128。在支持它的平台上,QBluetoothUuid(quint128) 构造函数和QBluetoothUuid::toUInt128() 方法现在使用这种类型,而不是早期 Qt 版本使用的自定义结构。只要您的代码将 quint128 作为不透明类型处理,这一变更在源代码和二进制文件中都是兼容的,但如果遇到任何问题,请考虑使用新的重载,将QUuid::Id128Bytes 。不支持 128 位 int 类型的平台(如 MSVC)仍使用Qt Bluetooth 中的自定义结构。
Qt QML 模块
- 新增了通过 QML 管理应用程序权限的支持。Qt Qml QtCore模块通过一组权限类型将 Qt C++Application Permissions功能暴露给 QML,这些权限类型可用于以跨平台方式检查或请求权限。更多信息,请参阅QML Application Permissions。
- XMLHttpRequest 对象现已更新,增加了两项功能,使其更接近现代浏览器。添加了responseURL 属性,可用于确认是否发生了任何重定向。同样,还添加了overrideMimeType 方法,可用于让XMLHttpRequest 对象根据特定的 MIME 类型(而不是响应的 Content-Type 标头)来解析响应。
- QML Language Server 已初步支持去定义和查找用法。它还支持完整的文档格式。
- 现在可以用插件扩展 qmllint。插件 API 目前处于技术预览阶段。
Qt Quick 模块
- 添加了font.features 属性,可直接访问字体中的 OpenType 功能。
- TableView 具有 属性,可控制选择单个还是多个单元格。selectionMode
- TreeView 具有 属性,可仅显示模型的子树。rootIndex
- AnimatedImage 现在支持 属性。sourceSize
- 环境变量
QT_QUICK_FLICKABLE_WHEEL_DECELERATION
可让您自定义使用 "clicky "滚轮鼠标滚动后的减速效果。默认情况下,加速度现在是关闭的,因此滚动距离与 "点击 "次数成正比(除非平台提供自己的加速度);但您可以设置一个小于 15000 的值来恢复旧的行为。flickDeceleration 属性现在仅适用于触摸点击。 - 大多数属性现在都是FINAL 属性,这意味着不能再通过声明具有相同名称的新属性来隐藏它们。如果
FINAL
属性被阴影化,系统将发出警告。我们建议用户重新命名此类属性,以避免意外的行为变化。 - 在QQuickWindow,QQuickRenderControl 和QSGTexture 中添加并公开了大量与QRhi 相关的函数。现在,查询屏幕上或屏幕外Qt Quick 渲染所使用的QRhi 、QRhiSwapChain 或QRhiCommandBuffer 变得更加简单。以前由于依赖QRhi* 类而从文档中隐藏的一些函数现在变得可见。为QQuickWindow 添加了createTextureFromRhiTexture() 作为 createTextureFromImage() 的对应函数。
- 更新了场景图示例:添加了rhiunderqml,用新的可移植的rhitextureitem 示例替换了传统的、仅适用于 OpenGL 的fboitem 示例,并更新了customrendernode 示例。这些示例共同展示了使用自定义底层 2D/3D 渲染扩展Qt Quick 场景的三种方法(这三种方法是:底层/覆盖、通过渲染到纹理支持的自定义项目、使用QSGRenderNode 的自定义项目)。
- 已添加 Path::simplified 属性,用于在渲染路径前自动简化路径。这反映了QPainterPath::simplified() 函数。
- 为QQuickWindow 的渲染添加了收集 GPU 时间戳的支持。通过QQuickGraphicsConfiguration 的setTimestamps() 或相应的环境变量启用后,GPU 端时间戳将出现在启用
qt.scenegraph.time.renderloop
等日志类别时打印的调试输出中,并出现在Qt Quick 3D 的DebugView 项中,以补充 CPU 端时间戳。目前,Direct 3D 11、Metal 和 Vulkan(假设底层 Vulkan 实现支持时间戳查询)均支持此功能。对其他 3D API 的支持将在未来版本中推出。
Qt Quick Controls 模块
- 为SpinBox 添加了live 属性。当用户编辑displayText 时,该属性可控制value 是否更新。
- 为拨盘添加了wrapped 信号。当拨号盘缠绕(即从最大值转到最小值,或反之亦然)时,就会发出该信号。
- 为拨盘添加了startAngle 和endAngle 属性。这些属性可控制刻度盘的起始和终止角度(单位:度)。
Qt Quick 布局模块
- 已添加LayoutItemProxy ,这是一个用于编写响应式布局的辅助项(技术预览版中)
- 添加了适用于每种布局类型的uniformCellSizes 、uniformCellSizes 、uniformCellWidths 和uniformCellHeights 属性(技术预览版中)
- StackLayout 如果在小于或等于当前索引的位置插入或移除项目,现在将更新 。currentIndex
Qt Quick 形状模块
- 添加了实验性曲线渲染后端,它将以比默认几何体渲染器更高的质量渲染曲线,并在不使用 MSAA 的情况下应用抗锯齿。可以使用Shape::preferredRendererType 属性选择它。
Qt Quick 3D 模块
- 添加了用于程序化创建TextureData 的 QML API,名为ProceduralTextureData 。以前只能通过 C++ 子类化QQuick3DTextureData 来实现。
- 添加了用于程序化创建网格几何体的 QML API,名为ProceduralMesh 。以前只能通过 C++ 子类化QQuick3DGeometry 来实现。
- 现在可以导入 PLY 文件。
- 添加了对使用QQuick3DTextureData 创建 3D 纹理的支持。
- 已添加初始渲染器扩展支持。这是允许添加额外通道和自定义内置渲染通道的第一步。View3D 有一个名为 extensions 的新属性,可接收QQuick3DRenderExtension 子类数组。QQuick3DExtensionHelpers 中的辅助函数可进一步支持该功能。
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 新增两个函数:boundValueName()/boundValueNames()
Qt TextToSpeech 模块
QTextToSpeech 类又学到了一些所有引擎都能使用的技巧:
- 应用程序可以通过enqueue 向合成引擎添加多块文本。
- 新的aboutToSynthesize 信号会在合成文本块之前发出。
- 通过findVoices 成员函数,使用一组标准从引擎提供的声音中选择一个声音变得非常容易。此外,QML 代码还可以使用VoiceSelector 类型作为附加属性。
并非每个引擎都能提供所有新功能。应用程序可以使用新的Capabilities 标志和engineCapabilities 属性来检查当前使用的引擎支持以下哪些新功能:
- 如果引擎具有Synthesize 功能,QTextToSpeech 现在可以将文本合成为 PCM 数据。synthesize 函数可与接收已合成 PCM 数据块的可调用程序一起使用。
- 如果引擎具有WordByWordProgress 功能,QTextToSpeech 就会在当前文本块中的每个单词被说出时发出sayingWord 信号。
Qt WebEngine 模块
- 在QWebEngineLoadingInfo 中添加响应标头。
- 使在QWebEngineUrlRequestJob 中添加额外的响应标头成为可能。
- 添加了QWebEngineUrlScheme::FetchApiAllowed 标志,用于为自定义 URL 方案启用 HTML5 Fetch API。
- qWebEngineGetDomainAndRegistry() 函数,以读取 Chromium/QtWebEngine 所看到的有效顶级域。
- 添加了 QWebEngineSettings::DisableReadingFromCanvas 设置,以禁用画布读取,从而提供额外保护,防止指纹识别。
Qt Widgets 模块
- QWidget 新增了 setTabOrder() 重载,可接收初始化列表,从而只需一次调用即可设置整个链。
- QMessageBox::Option 为每个消息框提供了控制是否使用本地消息框的方法。
平台变更
桌面平台
macOS
- 构建用户项目或 Qt for macOS 本身现在至少需要 CMake 3.21.1 版本。
- QMessageBox::setCheckBox在使用本地消息框时,() 现在受到尊重。
- QFileDialog 不再不必要地触发权限对话框。
移动平台
安卓
- 使用QDesktopServices::openUrl() 时已添加 FileProvider 支持。
- 默认已添加 AndroidX(FileProvider 的依赖项)。
- 针对特定于 Android 的目标属性引入了QTP0002CMake 策略。
- 更新了 Android 支持的示例列表。
- 最大支持版本为安卓 13
- 更新 Gradle 至 8.3.0 版。
- QFileDialog 使所有提供的名称过滤器生效,而不仅仅是选定的过滤器。
- 将 Android 目标 SDK 级别更新为 33,以符合 Play Store 2023 年的要求。
iOS
- 已添加对QWindow::setMask() 的支持,用于屏蔽渲染和输入。
- 已添加对外来窗口的支持,以便将 UIView 嵌入 QWindows。
嵌入式平台
Boot to Qt
- 添加了对 Yocto 4.2 (mickledore) 的支持。
- 更新了目标硬件的支持级别,新增了受支持的板卡:
- 增加了对NXP i.MX 93 板卡的 1 级支持。
- 第 1 级支持 Jetson AGX Xavier 板。
- 添加了对NXP i.MX 8QuadXPlus 板的第 3 级支持。
- 新增对 Toradex Apalis iMX8 板卡的第 3 级支持。
- Toradex 和 ST 目标现在使用最新的 Yocto LTS 版本 (kirkstone)。
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.