Qt 6.4 中的新功能
Qt 6.4 中新增和恢复的模块
Qt 6.4 新增了以下模块:
- Qt HTTP Server- 用于在 Qt 应用程序中嵌入 HTTP Server 的模块。该模块处于技术预览阶段,不能保证 API 和 ABI 的稳定性。
- Qt Quick 3D Physics- 高级 QML 模块,为 添加物理模拟功能。Qt Quick 3D
Qt 6.4 重新引入了 Qt 5 中的 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 字符串和字符字面量。 - 已添加字面运算符
_s
和_ba
,分别用于在Qt::Literals::StringLiterals 命名空间中创建QString 和QByteArray 字面量。弃用_qs
和_qba
,改用_s
和_ba
。 - 弃用不带参数的 QString::count() 和 QByteArray::count(),以避免与同名算法重载混淆。它们可由
size()
或length()
方法取代。 - QStringEncoder 在启用 ICU 支持的情况下构建 Qt 时,现在 Qt 和 支持 ICU 支持的所有编解码器。QStringDecoder
- 在 Android 和 JNI 开发类QJniObject 和QJniEnvironment 中,为callMethod 、findMethod 和类似方法添加了重载。现在,调用 Java 函数和注册本地方法无需指定签名字符串。
- 新的模板函数QJniObject::construct() 允许从 C++ 实例化 Java 类,而无需指定类型或签名字符串。
- QByteArray 现在有了 percentDecoded() 实例方法,可替代在实例上调用 fromPercentEncoding() 静态方法。
- QTextStream 现在支持 char16_t 的输入和输出。
- QStringView 现在有了 localeAwareCompare() 方法,并能计算指定子字符串出现的次数。
- QDate 现在可以用各种 std::chrono 年-月-日结构类型(如果可用)来构造,并且有了 addDuration(),可以使用 std::chrono::days(如果可用)。
- QDateTime 同样地,它也获得了 addDuration(std::chrono::毫秒),以及加减相同类型的算术运算、返回 值的差值,以及一些使用各种 std::chrono 类型描述时间时刻的静态伪构造函数。QDateTime
- 添加了QTimeZone::fromStdTimeZonePtr(const std::chrono::time_zone *)。
- QCalendar的名称构造现在接受QAnyStringView 。
Qt GUI 模块
- 添加了QTextDocumentFragment::toMarkdown()、QTextDocumentFragment::fromMarkdown() 和QTextCursor::insertMarkdown()。
Qt Quick 模块
- TableView 添加了几个新属性和函数,改进了对键盘导航和选择、行和列选择、动画、子单元格定位等的支持。
- TreeView 现在,该模块支持选择,并获得了更广泛的 API,可递归扩展和折叠树中的节点。
- QQuickWidget 除 OpenGL 外,现在还能使用所有支持的 3D 图形 API(Vulkan、Metal、Direct3D 11)。在使用 时,应用程序不再需要强制使用 OpenGL 进行渲染。QQuickWidget
- 在使用自定义材质的着色器中添加了对组合图像采样器数组的支持。新函数QSGMaterialShader::combinedImageSamplerCount() 和QSGMaterialShader::updateSampledImage() 中现有
texture
参数的增强语义均支持该功能。 - 在QSGMaterialShader::GraphicsPipelineState 中添加了将多边形光栅化模式从
solid
更改为line
的支持(仅在使用的 3D API 支持时可用)。 - ShaderEffectSource.format 和 在以前的 Qt XML 6 版本中并无用处,传统值在实际中被忽略。现在我们记录了这一情况,并引入了新的、实际有用的值,特别是可以根据需要请求浮点(FP16 或 FP32)纹理,而不是 RGBA8。layer.format
- 添加了QQuickRenderTarget::fromPaintDevice() 功能,可使用
software
后端重定向来自QQuickWindow 的输出。 - 在QQuickRenderTarget 中添加了重载,可以指定纹理或图像对象的本地格式。在一些高级使用案例中,当需要处理非 RGBA8 的本地纹理时,这一点非常重要。请注意,只有 Qt 渲染基础架构支持的本地格式才会被接受。
- 为QQuickRenderTarget 添加了setMirrorVertically() ,它允许请求Qt Quick 渲染器改变其矩阵,以便在将基于 3D API 的渲染重定向到纹理时获得垂直翻转的结果。
- Qt Quick 如果主图形设备与 Qt 3D 不兼容,windows 现在会尝试使用 Direct 3D (WARP) 软件光栅化平台,而无需手动设置环境变量。
- 在
threaded
渲染循环的Qt Quick 场景图中添加了简单的启发式方法,用于识别基于 vsync 的断点节流。在不阻塞渲染线程的情况下,当帧的渲染/呈现速度过快时,它现在会自动切换到基于定时器的常规动画运行方式,从而防止 QML 动画运行速度过快。 - 为自定义动画添加了FrameAnimation 。允许与动画帧同步运行自定义脚本。
Qt Quick Controls 模块
- 作为技术预览版,为 iOS 添加了新的原生外观样式--iOS 样式。
- TreeViewDelegate 在 中添加了三个新属性,用于描述当前、选中或高亮显示。TreeView
Qt Quick Dialogs 模块
- 添加了ColorDialog 。在支持原生对话框的平台上,这是一个原生对话框,而在其他平台上,这是一个非原生的Qt Quick 对话框。
非本地对话框支持所有非本地样式:基本"、"融合"、"想象"、"材质 "和 "通用"。
Qt Widgets 模块
- QFormLayout 具有新的 () 和 () 成员函数,其重载功能允许按索引、输入部件或行布局隐藏或显示行。isRowVisible setRowVisible
- QKeySequenceEdit 有一个新的 属性。使用该属性可控制部件是否显示允许用户清除编辑的清除按钮。clearButtonEnabled
- QWizard 有一个新插槽 ,允许应用程序在不访问当前页面和目标页面之间的页面的情况下移动到一个页面。setCurrentId
Qt Network 模块
- 添加了QSslServer 。这简化了仅通过 TLS 进行通信的服务器的创建。
- QNetworkInformation 现在有了 loadBackendByFeatures(Features) 和 loadBackendByName( ) 函数,旨在最终取代相应的重载 load(Features/ ) 函数,后者已被标记为过时。QStringViewQStringView
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 就能更好地优化代码。
- QML 类型编译器 (qmltc)
- 扩展 QML 语言覆盖范围
- QML 脚本编译器(qmlsc、qmlcachegen)
- 值类型列表上的各种操作现已编译为 C++。
- 死代码和死存储现在已被更积极地优化掉。
- 类型转换现在在写入值的地方进行,而不是在读取值的地方。如果数值被多次读取,这样会更快。
- QML 指针 (qmllint)
- QML Language Server (qmlls)
- 已添加补全支持
- 已添加代码动作修正功能,用于修正某些衬着器警告/提示
- 将可执行文件移至 libexec
- 清理了 CMake API:
- 用于调用 QML 类型编译器的qt_target_compile_qml_to_cpp()已被弃用。其功能已集成到qt_add_qml_module() 中。
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 连接模块
- QNdefMessage 不再导出。该类公开继承了 ,但 并不是为了被导出类继承而设计的。QList QList
警告: 这并不向后兼容,但这将防止将来出现 BC 中断。
- 在Qt Bluetooth 中,各种错误枚举都扩展了代表权限缺失错误的新错误代码。目前,这些代码用于 Android 和 macOS/iOS。请参见QBluetoothLocalDevice::MissingPermissionsError 作为示例。
Qt WebEngine 模块
- 添加了 HTML5 文件系统访问 API,由QWebEngineFileSystemAccessRequest
- QWebEngineLoadingInfo 改进了错误代码,尤其是 HTTP 错误代码
- QWebEngineView::setPage() 现在可用于已加载的页面
- 添加了 QWebEngineSettings::NavigateOnDrop,允许在拖放 URL 时禁用导航功能。
- QWebEngineUrlRequestInfo::ResourceTypeWebSocket 增加了允许拦截 websocket 连接的功能
平台变更
WebAssembly
WebAssembly 平台现在完全支持 Qt。详情请查看Qt for WebAssembly 的平台文档。
移动平台
移动平台
- 将 Gradle 更新至 7.4.2,将 Android Gradle Plugin 更新至 7.2.1。
- 将 NDK 更新至 r23b (23.1.7779620)。
- 添加了 CMake 变量QT_ANDROID_SIGN_APK和QT_ANDROID _ SIGN_AAB,以便直接从 CMake 构建签名软件包。
- 安卓辅助功能现在可感知滚动事件。
- 提高了 Android 应用程序的资产加载速度。
嵌入式平台
Boot to Qt
- Boot to Qt 栈更新为使用 Yocto 4.0.3 (kirkstone)。
- NXP 添加 i.MX8M Plus LPDDR4 EVK 作为新的参考设备。
QNX
- 添加了对 Qt Multimedia.
WebOS
- 已验证 Qt 6.4 可与 LG webOS OSE 2.18.0(Qt for webOS) 协同工作。
API 更改列表
这些页面概述了 Qt 6.4 中的 API 变化:
© 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.