news 2026/7/28 23:00:32

qt c++ 场景图架构的类都有什么

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
qt c++ 场景图架构的类都有什么

在 Qt C++ 中,场景图(Scene Graph)架构主要用于Qt Quick(QML)的底层渲染系统。自 Qt 5 起,Qt Quick 使用一个名为Scene Graph的图形渲染架构来高效地绘制 UI 元素。

场景图是一个保留模式(retained-mode)的渲染系统,它将 QML 元素转换为一系列低级的图形节点(nodes),然后交由 GPU 渲染。这套架构主要由以下几类核心类组成:


一、核心 Scene Graph 类(位于QtQuick模块)

1.QSGNode
  • 场景图中所有节点的基类。
  • 定义了节点类型(GeometryNode、TransformNode、ClipNode 等)和父子关系。
  • 不直接用于绘图,而是组织结构。
2.QSGGeometryNode
  • 继承自QSGNode
  • 包含几何数据(顶点、索引)和材质(QSGMaterial)。
  • 是实际用于渲染可视内容的节点。
3.QSGMaterial
  • 描述如何渲染几何体(着色器、uniform 变量等)。
  • 需配合QSGMaterialShader使用。
  • 可自定义以实现特殊视觉效果。
4.QSGMaterialShader
  • 封装 OpenGL(或 Vulkan/Metal)着色器代码。
  • QSGMaterial配对使用,负责编译和绑定 shader。
5.QSGTexture
  • 表示纹理资源。
  • 可从 QImage、OpenGL 纹理 ID 或 FBO 创建。
  • 常用于QSGOpaqueTextureMaterialQSGTextureMaterial
6.QSGTransformNode
  • 表示空间变换(平移、旋转、缩放)。
  • 影响其子节点的坐标。
7.QSGClipNode
  • 定义裁剪区域(scissor 或 stencil 裁剪)。
  • 子节点只在裁剪区域内可见。
8.QSGRootNode
  • 场景图的根节点。
  • 每个 QQuickItem 对应一个子场景图,最终挂载到根节点下。

二、与 QML/Quick 集成的类

9.QQuickItem
  • 所有可视 QML 元素(如 Rectangle、Image)的 C++ 基类。
  • 可重写updatePaintNode()来自定义场景图节点(这是集成自定义渲染的主要入口)。
class MyItem : public QQuickItem { Q_OBJECT public: MyItem() { setFlag(ItemHasContents, true); } protected: QSGNode *updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *) override; };
10.QSGRendererInterface
  • 提供对底层图形 API(OpenGL、Vulkan、Metal、Direct3D)的抽象。
  • 在高级自定义渲染中使用。
11.QSGRenderNode(Qt 5.8+)
  • 允许完全绕过标准场景图渲染流程,插入自定义 OpenGL/Vulkan 渲染命令。
  • 适用于复杂 3D 内容或高性能需求。

三、辅助类

  • QSGVertex/QSGGeometry:用于定义顶点格式和几何数据。
  • QSGSimpleRectNode/QSGSimpleTextureNode:便捷类,快速创建矩形或纹理节点。
  • QSGFlatColorMaterial/QSGTextureMaterial:预定义材质,简化开发。

四、线程模型相关

  • 场景图通常在渲染线程(render thread)中运行,与 GUI 线程分离。
  • 自定义QQuickItem时需注意线程安全:
    • updatePaintNode()在渲染线程调用。
    • 数据同步需通过QQuickItem::update()触发,并在updatePaintNode中安全读取。

总结:常用类关系简图

QQuickItem └── (owns) → QSGNode (via updatePaintNode) ├── QSGGeometryNode ──┬── QSGGeometry │ └── QSGMaterial ── QSGMaterialShader ├── QSGTransformNode ├── QSGClipNode └── QSGRenderNode (optional)

应用场景

  • 自定义高性能 UI 控件(如波形图、粒子效果)。
  • 混合 2D/3D 渲染(如嵌入 OpenGL 内容)。
  • 优化复杂动画性能。

如需深入了解,可参考 Qt 官方文档:

  • Qt Quick Scene Graph
  • Custom Geometry in Scene Graph

如果你有具体需求(比如“如何在 QML 中嵌入自定义 OpenGL 渲染”),也可以告诉我,我可以提供完整示例。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/19 0:02:42

Windows Cleaner完全指南:5个高效方法彻底解决C盘爆满问题

还在为Windows系统C盘爆红、电脑运行卡顿而烦恼吗?Windows Cleaner这款免费开源的磁盘清理工具,正是你需要的C盘优化解决方案!作为专治C盘爆红问题的系统加速利器,它能够智能识别并清理各类无用文件,让你的电脑重获新生…

作者头像 李华
网站建设 2026/7/24 13:38:20

X波段雷达多扩展目标优化跟踪【附代码】

✅ 博主简介:擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导,毕业论文、期刊论文经验交流。 ✅ 具体问题扫描文章底部二维码。 (1)多核相关滤波与模板自适应优化跟踪 X波段雷达在监测海面船舶时,目…

作者头像 李华
网站建设 2026/7/24 13:29:29

Cowabunga Lite:解锁iPhone个性化定制的终极指南

Cowabunga Lite:解锁iPhone个性化定制的终极指南 【免费下载链接】CowabungaLite iOS 15 Customization Toolbox 项目地址: https://gitcode.com/gh_mirrors/co/CowabungaLite 还在为iPhone单调的界面感到乏味?想要深度定制却又担心越狱风险&…

作者头像 李华
网站建设 2026/7/24 2:47:29

三步快速提取视频中的PPT:免费智能幻灯片导出工具完整指南

三步快速提取视频中的PPT:免费智能幻灯片导出工具完整指南 【免费下载链接】extract-video-ppt extract the ppt in the video 项目地址: https://gitcode.com/gh_mirrors/ex/extract-video-ppt extract-video-ppt是一款专业级视频PPT提取工具,能…

作者头像 李华
网站建设 2026/7/28 14:38:31

开发‘小红书图文转视频’工具链集成IndexTTS旁白生成

开发“小红书图文转视频”工具链集成IndexTTS旁白生成 在短视频内容席卷社交平台的今天,小红书、抖音、B站上的创作者早已不再满足于静态图文的表达。用户注意力越来越短,而视频凭借其更强的信息密度和情绪感染力,成为内容传播的绝对主力。但…

作者头像 李华
网站建设 2026/7/24 4:20:24

Parsec VDD虚拟显示器终极免费解决方案:彻底告别物理显示限制

Parsec VDD虚拟显示器终极免费解决方案:彻底告别物理显示限制 【免费下载链接】parsec-vdd ✨ Virtual super display, upto 4K 2160p240hz 😎 项目地址: https://gitcode.com/gh_mirrors/pa/parsec-vdd 想要在无显示器环境下运行图形界面应用&am…

作者头像 李华