Qt 6.4新增功能

Qt 6.4新增及恢复的模块

Qt 6.4增加了以下模块

  • Qt HTTP Server - 一个嵌入式 HTTP 服务器模块。此模块处于技术预览阶段,不保证 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 *) 构造函数变为非隐式。
  • Qt::Literals::StringLiterals 命名空间中添加了文字操作符 _L1,用于创建 Latin-1 字符串和字符文字。
  • Qt::Literals::StringLiterals 命名空间中添加了文字操作符 _s_ba,分别用于创建 QStringQByteArray 文字。以 _s_ba 替代已废弃的 _qs_qba
  • 废弃了不带参数的 QString::count() 和 QByteArray::count(),以避免与同名算法重载的混淆。它们可以被 size()length() 方法替代。
  • QStringEncoderQStringDecoder 现在支持 ICU 支持启用时 ICU 所支持的所有编解码器。
  • 在用于 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::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() 和增强的现有 texture 参数的语义 QSGMaterialShader::updateSampledImage() 实现的。
  • 增加了在 QSGMaterialShader::GraphicsPipelineState 中将多边形光栅化模式从 solid 改为 line 的支持。(仅在使用的3D API支持此功能时可用)
  • ShaderEffectSource.formatlayer.format 在以前的 Qt 6 版本中并没有用,在实践中遗留的值被忽略。现在对此进行了文档化,并引入了新的、真正有用的值,特别是为了能够在需要时请求球形(FP16或FP32)纹理而不是RGBA8。
  • 添加了 QQuickRenderTarget::fromPaintDevice(),允许将 QQuickWindow 的输出重定向到使用 software 后端的情况。
  • QQuickRenderTarget 中添加了重载,可以指定纹理或图像对象的原生格式。这在需要与不是RGBA8的本地纹理一起工作的某些高级用例中很有用。请注意,只有由 Qt 的渲染基础设施支持的本地格式才被接受。
  • QQuickRenderTarget 中添加了 setMirrorVertically(),允许请求 Qt Quick 渲染器改变其矩阵,以便当将基于 3D API 的渲染重定向到纹理时,得到垂直翻转的结果。
  • 如果主图形设备与 Qt 不兼容,Qt Quick 窗口现在将尝试使用 Direct 3D 的软件光栅化平台(WARP),而无需手动设置环境变量。
  • 将简单的启发式算法添加到 Qt Quick 场景图的线程化渲染循环,以识别基于 veeee 追踪的崩溃。当帧渲染/显示太快时,它现在自动切换到常规的基于定时器的运行动画方法,这样就防止了 QML 动画运行得太快。
  • 添加了自定义动画的FrameAnimation。允许在动画帧同步中运行自定义脚本。

Qt Quick Controls 模块

  • 作为技术预览,添加了新的看起来像是原生应用的iOS样式,iOS Style
  • TreeViewDelegate有三个新属性,用来描述它是否位于当前位置、是否选中或是否高亮显示在TreeView中。

Qt Quick Dialogs 模块

  • 添加了ColorDialog。在支持这些平台的平台上,这是一个原生对话框;在其他平台上,它是一个非原生的Qt Quick对话框。

    非原生对话框支持所有非原生样式:基本、融合、想象、材料和通用。

Qt Widgets 模块

Qt 网络模块

  • 添加了QSslServer。这对于创建仅通过TLS进行通信的服务器来说更加简单。
  • QNetworkInformation现在有loadBackendByFeatures(Features)和loadBackendByName(QStringView),意在使用时最终会替换标记为废弃的相应的重载load(Features/QStringView)函数。

Qt 测试模块

  • QTestEventLoop::enterLoopMSecs()现在如果超时期限小于一秒,将使用精确计时器。
  • 自定义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类似于C++中的QList。这消除了使用var进行此类属性或将它们的元素包装进对象的需求。
    • 新的pragma ComponentBehavior允许您指定在QML文件中定义的组件是否可以在它们创建的上下文之外使用。如果不可以(pragma ComponentBehavior: Bound),那么Qt Quick 编译器可以更好地优化您的代码。
  • QML 类型编译器(qmltc)
    • 扩展了QML语言的覆盖范围
  • QML 脚本编译器(qmlsc, qmlcachegen)
    • 现在将值类型的列表上的各种操作编译为C++。
    • 现在更积极地优化了死的代码和存储。
    • 类型转换现在发生在值写入的地方,而不是读取的地方。如果值被读取多次,这会更高效。
  • QML 检查器 (qmllint)
    • 添加了关于正确使用 QtQuickQtQuick 控件的新的警告。
  • QML 语言服务器 (qmlls)
    • 添加了补全支持
    • 添加了对某些检查器警告/提示的代码修复操作
    • 将可执行文件移动到 libexec
  • 清理了 CMake API

Qt 快速 3D 模块

  • 添加了对光贴图烘焙支持的预览。这提供了一个使用光线追踪预生成光贴图的静态全局照明解决方案。有关详细信息,请参见 光贴图和全局照明
  • 添加了 SpecularGlossyMaterial 以启用使用光泽度/光滑度工作流程而不是金属度/粗糙度。
  • 添加了 LineParticle3D 类型,允许创建线形精灵粒子。
  • 添加了 Model.castsReflection 属性以控制模型是否由反射探头渲染以及在反射中是否可见。同样,该属性也介绍给了 精灵粒子
  • 添加了 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 蓝牙中,各种错误枚举已通过表示缺少权限的新错误代码进行了扩展。目前这些代码用于 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_APKQT_ANDROID_SIGN_AAB,以便从CMake中直接构建签名包。
  • Android无障碍现在意识到了滚动事件。
  • 提高了Android应用的资源加载速度。

嵌入式平台

引导至Qt

  • 引导至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更改的概述

© 2024 The Qt Company Ltd. 本文件中包含的文档贡献的所有权属于其各自的所有者。本文件中提供的文档是根据自由软件开发基金会发布的GNU自由文档许可证版本1.3的条款许可的。Qt及其 respective标志是The Qt Company Ltd.在芬兰以及/或在其他国家和地区的商标。所有其他商标均为其各自所有者的财产。