本页内容

Qt 6.4 的新功能

Qt 6.4 中的新增和恢复模块

Qt 6.4 新增了以下模块:

  • Qt HTTP Server - 一个用于将 HTTP 服务器嵌入 Qt 应用程序的模块。该模块处于技术预览阶段,不保证 API 和 ABI 的稳定性。
  • Qt Quick 3D Physics——一个高级 QML 模块,为Qt Quick 3D 添加了物理模拟功能。

Qt 6.4 重新引入了 Qt TextToSpeech 模块。该模块在 Qt 6.3 中曾被移除,现已重新引入。该模块现采用 CMake 构建系统,并兼容 Qt 6。

有关各模块变更的更多详细信息,请参阅《Qt 6 中 Qt 模块的变更》。

Qt 6.4 的新功能

Qt Core 模块

  • 新增了 `QLatin1StringView ` 作为 `QLatin1String` 的别名。这现已成为引用 Latin-1 字符串视图的推荐名称。
  • QLatin1StringView(const char *, qsizetype) 和QLatin1StringView(const char *, const char *) 的构造函数已设为非显式。
  • 添加了字面量运算符_L1 ,用于在Qt::Literals::StringLiterals 命名空间中创建 Latin-1 字符串和字符字面量。
  • 在Qt::Literals::StringLiterals 命名空间中,添加了_s 和_ba 字面量运算符,分别用于创建QString 和QByteArray 字面量。_qs 和_qba 已被弃用,建议改用_s 和_ba 。
  • 已弃用不带参数的QString::count() 和QByteArray::count(),以避免与同名的算法重载产生混淆。它们可分别由size() 或length() 方法替代。
  • QStringEncoder 此外,当 Qt 在启用 ICU 支持的情况下构建时,QStringDecoder 现已支持 ICU 支持的所有编解码器。
  • 在用于 Android 和 JNI 开发的类中,QJniObject 和QJniEnvironment 已为callMethod 、findMethod 及类似方法添加了重载。现在无需指定签名字符串即可调用 Java 函数并注册本机方法。
  • 新的模板函数QJniObject::construct() 允许从 C++ 实例化 Java 类,而无需指定类型或签名字符串。
  • QByteArray 现在提供了 percentDecoded() 实例方法,作为在实例上调用 fromPercentEncoding() 静态方法的替代方案。
  • QTextStream 现在支持 char16_t 的输入和输出。
  • QStringView 现在拥有 localeAwareCompare() 方法,并可通过 count() 统计给定子字符串出现的次数。
  • QDate 现在可以从各种 std::chrono 年-月-日结构类型(如有)进行构造,并且它有一个接受 std::chrono::days 的 addDuration() 方法(如有)。
  • QDateTime 同样,它还增加了 addDuration(std::chrono::milliseconds) 方法,以及用于加减同类型的算术运算、返回QDateTime 值差值的方法,以及几个接受各种描述时间点的 std::chrono 类型的静态伪构造函数。
  • 新增了 `QTimeZone::fromStdTimeZonePtr(const std::chrono::time_zone *)`。
  • QCalendar的按名称构造函数现在接受QAnyStringView 。

Qt GUI 模块

Qt Quick 模块

  • TableView 中添加了若干新属性和函数,这些属性和函数增强了对键盘导航和选择、行和列选择、动画、子单元格定位等的支持。
  • TreeView 现在支持选择功能,并拥有了更广泛的 API,可递归地展开和折叠树中的节点。
  • QQuickWidget 除了 OpenGL 之外,现在还支持所有受支持的 3D 图形 API(Vulkan、Metal、Direct3D 11)。应用程序在使用QQuickWidget 时,不再必须强制使用 OpenGL 进行渲染。
  • 新增了对自定义材质所用着色器中组合图像采样器数组的支持。这通过新函数 `QSGMaterialShader::combinedImageSamplerCount()` 以及 `QSGMaterialShader::updateSampledImage()` 中现有 `texture ` 参数的增强语义来实现。
  • 在QSGMaterialShader::GraphicsPipelineState 中,新增了将多边形光栅化模式从solid 切换为line 的支持。(仅当所使用的 3D API 支持此功能时可用)
  • ShaderEffectSource.format 而在之前的 Qt 6 版本中,layer.format 并无实际用途,其旧版值在实际应用中会被忽略。现已对此进行文档说明,并引入了新的、真正有用的值,特别是允许根据需要请求浮点(FP16 或 FP32)纹理,而非 RGBA8。
  • 新增了QQuickRenderTarget::fromPaintDevice(),支持将QQuickWindow 的输出重定向至software 后端。
  • 在QQuickRenderTarget 中添加了重载方法,支持指定纹理或图像对象的原生格式。这在某些高级用例中尤为重要,例如需要处理非 RGBA8 的原生纹理时。请注意,仅接受 Qt 渲染基础设施支持的原生格式。
  • 在QQuickRenderTarget 中添加了setMirrorVertically() 方法,该方法允许请求Qt Quick 渲染器调整其矩阵,以便在将基于 3D API 的渲染重定向到纹理时获得垂直翻转的结果。
  • Qt Quick 现在,如果主图形设备与 Qt 不兼容,Windows 系统将尝试使用 Direct 3D 的软件光栅化平台(WARP),而无需手动设置环境变量。
  • 在Qt Quick 场景图的threaded 渲染循环中添加了简单的启发式算法,用于识别基于vsync的异常限速情况。当帧渲染/呈现速度过快且未阻塞渲染线程时,系统现在会自动切换为基于定时器的常规动画运行方式,从而防止QML动画运行过快。
  • 为自定义动画添加了FrameAnimation 。允许在与动画帧同步的情况下运行自定义脚本。

Qt Quick Controls 模块

  • 为 iOS 添加了一种新的原生风格——“iOS 样式”,目前处于技术预览阶段。
  • TreeViewDelegate TreeView 中新增了三个属性,用于描述其当前状态是“当前”、“选中”还是“高亮”。

Qt Quick Dialogs 模块

  • 新增了ColorDialog 。在支持该功能的平台上,这将显示为原生对话框;在其他平台上,则显示为非原生的Qt Quick 对话框。

    非原生对话框支持所有非原生样式:Basic、Fusion、Imagine、Material 和 Universal。

Qt Widgets 模块

  • QFormLayout 新增了isRowVisible() 和setRowVisible() 成员函数,其重载版本支持按索引、输入控件或行布局隐藏和显示行。
  • QKeySequenceEdit 新增了clearButtonEnabled 属性。使用它来控制小部件是否显示“清除”按钮,该按钮允许用户清除编辑内容。
  • QWizard 新增了一个名为setCurrentId 的插槽,允许应用程序跳转到目标页面,而无需经过当前页面与目标页面之间的其他页面。

Qt Network 模块

  • 新增了 `QSslServer`。这简化了仅通过 TLS 进行通信的服务器的创建。
  • QNetworkInformation 现在增加了 loadBackendByFeatures(Features) 和 loadBackendByName(QStringView),旨在最终取代相应的重载函数 load(Features/QStringView),这些函数现已标记为弃用。

Qt Test 模块

  • 如果超时时间少于一秒,QTestEventLoop::enterLoopMSecs() 现在会使用 PreciseTimer。
  • 自定义的 QTest::compare() 实现现在应修改对 QTest::compare_helper() 的任何调用,改用两个新重载中的一个,而不是旧的重载,因为旧的重载现已弃用(以便仅在检查实际失败时,才在失败报告中生成表示值的字符串)。
  • 新增了QAbstractItemModelTester::setUseFetchMore()。
  • 新宏 QCOMPARE_{EQ,NE,GT,GE,LT,LE}() 支持与QCOMPARE() 类似的比较报告功能。 其中 EQ 宏执行精确比较,不包含QCOMPARE() 的自定义设置。这些宏还提供了常规的 QTRY_COMPARE_*() 和 QTRY_COMPARE_*_WITH_TIMEOUT() 变体。

Qt Qml 模块

  • QML 语言
    • 现在可以注册带名称的自定义值类型。也就是说,QML_VALUE_TYPE 的参数不再被忽略,且必须为小写。注册完成后,您可以在 QML 中声明自己定义的值类型的属性。
    • 现在,您可以在 QML 中将任何命名值类型存储在列表中。例如,QML 中的 list<rect> 类似于 C++ 中的QList<QRectF>。这消除了为此类属性使用 var 或将元素包装为对象的必要性。
    • 新的 pragma ComponentBehavior 指令允许您指定在 QML 文件中定义的组件是否可以在其创建上下文之外使用。如果不允许(pragma ComponentBehavior: Bound),则Qt Quick Compiler 可以更好地优化您的代码。
  • 模块系统
    • qmldir 文件中的import 指令已增强,支持默认导入,允许模块指定即使为可选但qmllint仍应视为必需的导入项。
  • QML 类型编译器 (qmltc)
    • 扩展了 QML 语言的覆盖范围
  • QML 脚本编译器 (qmlsc, qmlcachegen)
    • 对值类型列表的各种操作现已编译为 C++ 代码。
    • 现在会更彻底地优化掉死代码和死存储操作。
    • 类型转换现在发生在值被写入的位置,而不是被读取的位置。如果该值被多次读取,这种方式会更快。
  • QML 代码检查工具 (qmllint)
  • QML Language Server (qmlls)
    • 新增代码补全支持
    • 针对某些代码检查工具的警告/提示,添加了代码修复操作
    • 将可执行文件移至 libexec 目录
  • 清理了 CMake API:

Qt Quick 3D 模块

  • 新增了光照贴图烘焙功能的预览版。该功能提供了一种基于光照贴图的静态全局光照解决方案,这些光照贴图是通过光线追踪预先生成的。详情请参阅《光照贴图与全局光照》。
  • 新增了SpecularGlossyMaterial ,支持使用镜面反射/光泽度工作流替代金属度/粗糙度工作流。
  • 新增了LineParticle3D 类型,允许创建线状精灵粒子。
  • 新增了Model.castsReflection 属性,用于控制模型是否由反射探针渲染以及是否可在反射中显示。该属性同样也已引入到sprite particles 中。
  • 新增了ReflectionProbe.boxOffset 属性,用于相对于探针的位置移动探针盒,同时不影响捕获点的位置。
  • 新增了ReflectionProbe.debugView 属性,用于显示一个立方体以可视化探针框。
  • 新增了 `HeightFieldGeometry `,用于从图像文件创建高度场几何体。
  • 新增了CubeMapTexture ,支持在着色器中使用立方贴图纹理,使自定义材质和后处理效果能够正常工作。输入可以是包含所有6个面图像数据的.ktx 容器,也可以是6个单独的图像文件。
  • 新增了支持使用立方贴图(而非光探针)渲染天空盒的功能。可通过设置背景模式SceneEnvironment.SkyBoxCubeMap 来启用此功能。
  • 新增ProceduralSkyTextureData 用于程序化生成 HDR 光探针或天空盒纹理。
  • 改进了点光源和聚光灯的阴影渲染效果。
  • 在View3D 中添加了renderFormat 属性,以便在View3D 使用其(默认)离屏渲染模式时指定底层纹理格式。可用值与ShaderEffectSource.format 中的值相同(该属性在6.4版本中也进行了修订)。这允许使用浮点纹理代替默认的RGBA8。
  • 已移除对导入 UIP 文件的支持。在之前的版本中,旧版Qt 3D Studio功能与Qt Quick 3D 之间的映射已经存在问题。因此,Qt 6.4从balsam 工具中移除了对.uip 文件的支持。

Qt Connectivity Module

  • QNdefMessage 不再被导出。该类公开继承了QList ,但QList 的设计初衷并非供导出类继承。

    警告:此 更改不向后兼容,但将有助于避免未来出现向后兼容性问题。

  • 在 `Qt Bluetooth ` 中,各种错误枚举已扩展了新的错误代码,用于表示权限缺失错误。目前这些代码在 Android 和 macOS/iOS 系统上使用。请参见 `QBluetoothLocalDevice::MissingPermissionsError ` 作为示例。

Qt WebEngine 模块

平台变更

WebAssembly

Qt 现已在 WebAssembly 平台上得到全面支持。详情请参阅Qt for WebAssembly中的平台文档。

移动平台

Android

  • 将 Gradle 更新至 7.4.2,并将 Android Gradle 插件更新至 7.2.1。
  • NDK 已更新至 r23b(23.1.7779620)。
  • 新增了 CMake 变量QT_ANDROID_SIGN_APK和QT_ANDROID_SIGN_AAB,以便直接通过 CMake 构建已签名的包。
  • Android 辅助功能现可识别滚动事件。
  • 改进了 Android 应用的资源加载速度。

嵌入式平台

Boot to Qt

  • Boot to Qt 堆栈已更新为使用 Yocto 4.0.3(kirkstone)。
  • NXP 新增 i.MX8M Plus LPDDR4 EVK 作为参考设备。

QNX

WebOS

  • 已验证 Qt 6.4 可与 LG webOS OSE 2.18.0(Qt for webOS)配合使用。

API 变更列表

这些页面概述了 Qt 6.4 中的 API 变更:

© 2026 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.