本页内容

场景图的调整

场景图适配在Qt Quick

在 Qt 5.0 中,Qt Quick 始终依赖 OpenGL(OpenGL ES 2.0 或 OpenGL 2.0)来解析场景图并将结果渲染到渲染目标上。

从 Qt 5.8 开始,Qt Quick 还支持软件渲染以及 OpenVG 渲染。这是通过额外的场景图适配实现的,这些适配要么以插件形式提供(openvg),要么内置于Qt Quick 库中(软件渲染)。默认的适配方式仍直接依赖于 OpenGL。

从 Qt 5.14 开始,默认适配方案新增了通过图形抽象层进行渲染的选项,该抽象层即由 Qt GUI 模块提供的图形抽象层(即 Qt 渲染硬件接口 RHI)进行渲染。启用后,将不再进行直接的 OpenGL 调用。取而代之的是,场景图通过使用该抽象层提供的 API 进行渲染,随后这些调用会被转换为 OpenGL、Vulkan、Metal 或 Direct 3D 调用。 着色器的处理也实现了统一:只需编写一次着色器代码,编译为SPIR-V,然后转换为适合各种图形 API 的语言。

从 Qt 6.0 开始,基于 RHI 的渲染模型成为默认选项,且不再提供回退到直接使用 OpenGL 的选项。

在应用程序中切换适配方案

与software 不同,基于 RHI 的渲染器并非额外的适配方案,而是始终内置的。从 Qt 6.0 开始,它始终处于启用状态。 在支持多种图形 API 的平台上,场景图会根据平台特性进行选择。如果不需要这种行为,应用程序可以通过设置环境变量QSG_RHI_BACKEND ,或者结合使用QQuickWindow::setGraphicsApi()和QSGRendererInterface::GraphicsApi 来强制指定特定的图形 API。

切换到其他适配模式有两种方法:

  • 使用环境变量——在启动应用程序前设置QT_QUICK_BACKEND 或旧版QMLSCENE_DEVICE 环境变量。
  • 使用 C++ API —— 在应用程序的 main() 函数早期阶段调用QQuickWindow::setSceneGraphBackend()。

支持以下后端:

要确定当前使用的是哪个后端,您可以通过QSG_INFO 环境变量或qt.scenegraph.general 日志类别启用基本场景图信息日志记录。这样会在应用程序启动期间,将部分信息打印到调试输出中。

注意:在 同时禁用 OpenGL 和 Vulkan 的 Qt构建中, 默认适配方式为software 。但这不适用于 Windows 或 macOS,因为这些平台分别始终启用了 Direct 3D 或 Metal 支持。

注意:通常, 非默认的适配方案会带来一系列限制,因为它们很难提供与 OpenGL 100% 兼容的功能集。不过,这些适配方案在某些领域可能具有其独特的优势。有关各种适配方案的更多信息,请参阅下文各章节。

默认适配方案

直接使用 OpenGL 时,默认适配方案能够提供完整的Qt Quick 2 功能集。有关更多详细信息,请参阅“默认适配”部分。

软件适配

软件适配是 Qt Quick 2的另一种渲染器,它使用光栅绘制引擎来渲染场景图的内容。有关更多详细信息,请参阅“软件适配”。

OpenVG

OpenVG 适配版是 Qt Quick 2 的另一种渲染器,它使用 OpenVG 命令渲染场景图的内容,以提供硬件加速的 2D 矢量和光栅图形。有关更多详细信息,请参阅《OpenVG 适配》。

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