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 容器添加了QVarLengthArray、QList、QByteArray 和 QString 的
assign()
重载,这些函数是在不增加现有capacity()
的情况下重新分配新数据的一种方便方式。 - 您可以通过在 CMakeLists.txt 中指定 QT_DISCARD_FILE_CONTENTS 源文件属性来省略任何添加到资源文件系统的文件的 内容。将 nodes 文件保留。当手动编写
.qrc
文件时,您可以通过将file
XML 节点的empty
属性设置为true
来达到相同的效果。 - QFileInfo 新增了返回原始路径的成员函数 readSymLink() 以及用于与时间戳相关函数的新重载,包含了 QTimeZone。
- 可以使用结构体 QProcess::UnixProcessParameters 和枚举 QProcess::UnixProcessFlag 中的 QProcess::setUnixProcessParameters() 成员函数在新的Unix特定的子进程设置和参数中进行修改,如关闭多余的文件描述符。
- 新类 QNativeIpcKey 保存了由 QSharedMemory 和 QSystemSemaphore 使用的本地密钥,为 Apple 平台上的沙箱应用提供了更好的支持。更多信息请参见Native IPC Keys。
- 大多数与时间段相关的Qt API已从
std::chrono
迁移到相关数据类型。 - QXmlStreamReader::hasStandaloneDeclaration() 报告文档是否有显式的独立声明。
Qt GRPC 模块
- 新增了QGrpcChannelOptions和QGrpcCallOptions。这些是新方法,用于将选项传递给通道和调用。
- 新增了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 提供了选项
Map
和Globe
,可以在项类型中使用 referenceSurface 属性来控制项是在平面上渲染还是遵循地球的曲率。 - 当按住 Shift 键时,可以使用鼠标滚轮来改变 方位角;当按住 Control 键时,可以改变 倾斜角度。
Qt 多媒体模块
- Qt 多媒体库不再请求音频或视频权限,而只是检查它们是否已提供。客户端应用程序必须使用 C++ 或 QML 权限 API 来请求权限。
- 新的 QWindowCapture 类增加了对在 QMediaCaptureSession 中捕获单个桌面应用程序窗口的视频的支持。录制的视频可以被导出到任何类型的视频输出,例如到 QMediaRecorder 或到 QVideoWidget。窗口捕获仅通过 FFmpeg 后端支持。
- QMediaRecorder 已扩展了属性,以提供更好的对视频质量、分辨率和比特率的控制。
Qt PDF 模块
- 新的 QPdfLinkModel 类提供了指定页面上的链接几何形状和目标。
- QPdfDocument::pageModel() 实现了 Qt::DecorationRole,以便按需渲染页面缩略图。
- 新的 QPdfPageSelector 类是一个用于在基于小部件的 PDF 观看器中选择页面的专用 QSpinBox。
Qt 定位模块
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属性,则将发出警告。我们建议用户将此类属性重命名以避免意外行为变化。
- 在QQuickWindow、QQuickRenderControl和QSGTexture中添加并公开了多个与QRhi相关的函数。现在查询正在屏幕或离屏Qt Quick渲染中所使用的QRhi、QRhiSwapChain或QRhiCommandBuffer得以简化。之前由于依赖QRhi*类而隐藏在文档中的某些函数现已被暴露。向QQuickWindow添加了createTextureFromRhiTexture(),作为createTextureFromImage()的对应函数。
- 更新场景图示例:增加了rhiunderqml,用新的、可移植的rhitextureitem示例替换了遗留下来的、只支持OpenGL的fboitem示例,并更新了customrendernode示例。这共同展示了三种用自定义低级2D/3D渲染(覆盖、插入分镜、通过纹理渲染的项,以及带有QSGRenderNode的项)扩展Qt Quick场景的方法。
- 为自动在渲染路径之前简化路径添加了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 Module
- 向SpinBox添加了live属性。这控制当用户编辑displayText时,是否更新value。
- 向Dial添加了wrapped信号。当转盘翻转时,即从最大值跳转回最小值或相反时,会触发此信号。
- 向Dial添加了startAngle和endAngle属性。这些属性控制转盘的起始和结束角度(以度为单位)。
Qt Quick Layouts Module
- 添加了LayoutItemProxy,这是一个用于编写响应式布局的辅助项(技术预览)。
- 为每种类型的Layout添加了uniformCellSizes、uniformCellSizes、uniformCellWidths和uniformCellHeights属性(技术预览)。
- StackLayout现在将在索引小于或等于当前索引的位置插入或删除Item时更新currentIndex。
Qt Quick Shapes Module
- 添加了实验性的曲线渲染后端,它将以比默认几何渲染器更高的质量渲染曲线,并在不使用MSAA的情况下应用抗锯齿。可以通过Shape::preferredRendererType属性进行选择。
Qt Quick 3D 模块
- 添加了用于创建TextureData的QML API,该API称为ProceduralTextureData。之前这只能通过C++通过派生QQuick3DTextureData来实现。
- 添加了用于创建网格几何的QML API,该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增加了两个新函数bindValueName()/bindValueNames()。
Qt TextToSpeech 模块
QTextToSpeech类获得了一些新技巧,这些技巧对所有引擎都可用。
- 应用程序可以通过enqueue将多个文本片段添加到合成引擎中。
- 新信号aboutToSynthesize会在文本片段被合成的瞬间发出。
- 现在可以用一组标准来选择由引擎提供的某个声音变得更容易,通过findVoices成员函数。此外,qml代码可以使用VoiceSelector类型作为附加属性。
并非所有新功能都对每个引擎都可用。应用程序可以使用新功能Capabilities标志和engineCapabilities属性来检查当前使用的引擎支持的功能。
- 如果引擎具有Synthesize功能,QTextToSpeech现在可以将文本合成为PCM数据。可以使用可调用的synthesize函数,当合成了PCM数据块时,它会接收数据块。
- 如果引擎具有WordByWordProgress功能,QTextToSpeech会发出sayingWord信号,当前文本块中的每个单词在说的时候都会发出。
Qt WebEngine 模块
- 将响应头添加到QWebEngineLoadingInfo。
- 使在QWebEngineUrlRequestJob中添加额外的响应头成为可能。
- 为启用HTML5 Fetch API的自定义URL方案,添加了QWebEngineUrlScheme::FetchApiAllowed标志。
- 添加了qWebEngineGetDomainAndRegistry()函数,用于读取Chromium/QtWebEngine所见到的有效顶级域名。
- 添加了 QWebEngineSettings::DisableReadingFromCanvas 设置,以禁用画布读取,增强对指纹识别的保护。
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. 在芬兰和其他国家/地区(包括全球)的商标。所有其他商标均为其各自所有者的财产。