QSGNode 类

QSGNode 类是场景图上所有节点的基类。 更多...

头文件 #include <QSGNode>
CMakefind_package(Qt6 REQUIRED COMPONENTS Quick)
target_link_libraries(mytarget PRIVATE Qt6::Quick)
qmakeQT += quick
继承自

QSGBasicGeometryNodeQSGOpacityNodeQSGRenderNodeQSGTransformNode

公共类型

flagsDirtyState
枚举DirtyStateBit { DirtyMatrix, DirtyNodeAdded, DirtyNodeRemoved, DirtyGeometry, DirtyMaterial, …, DirtySubtreeBlocked }
枚举Flag { OwnedByParent, UsePreprocess, OwnsGeometry, OwnsMaterial, OwnsOpaqueMaterial, InternalReserved }
flags标志
枚举NodeType { BasicNodeType, GeometryNodeType, TransformNodeType, ClipNodeType, OpacityNodeType, RenderNodeType }

公共函数

QSGNode()
virtual~QSGNode()
voidappendChildNode(QSGNode *node)
QSGNode *childAtIndex(int i) const
intchildCount() const
QSGNode *firstChild() const
QSGNode::Flagsflags() const
voidinsertChildNodeAfter(QSGNode *node, QSGNode *after)
voidinsertChildNodeBefore(QSGNode *node, QSGNode *before)
virtual boolisSubtreeBlocked() const
QSGNode *lastChild() const
voidmarkDirty(QSGNode::DirtyState bits)
QSGNode *nextSibling() const
QSGNode *parent() const
voidprependChildNode(QSGNode *node)
virtual voidpreprocess()
QSGNode *previousSibling() const
voidremoveAllChildNodes()
voidremoveChildNode(QSGNode *node)
voidsetFlag(QSGNode::Flag f, bool enabled = true)
voidsetFlags(QSGNode::Flags f, bool enabled = true)
QSGNode::NodeTypetype() const

详细描述

QSGNode类可以用作子容器。子节点通过appendChildNode()、prependChildNode()、insertChildNodeBefore()和insertChildNodeAfter()添加。节点顺序很重要,因为几何节点是根据场景图中它们的顺序进行渲染的。

场景图节点包含一种机制,用于描述场景的哪些部分已更改。这包括组合矩阵、累积不透明度、节点层次结构的更改等等。这些信息可以用于场景图渲染器的优化。为了确保节点被正确渲染,当节点更改时,用户必须使用正确的标志调用QSGNode::markDirty()。节点类上的大多数函数都会隐式调用markDirty()。例如,QSGNode::appendChildNode()将调用markDirty()并将QSGNode::DirtyNodeAdded传递给它。

如果每个帧节点都在变化,可以使用preprocess()函数将更改应用到渲染每帧的节点上。必须显式地通过在节点上设置QSGNode::UsePreprocess标志来启用preprocess()的使用。

虚拟函数isSubtreeBlocked()可以用来完全禁用一个子树。阻塞的子树中的节点将不会被preprocess()和渲染。

注意:所有带有QSG前缀的类都应在场景图的渲染线程上使用。有关更多信息,请参阅场景图和渲染

成员类型文档

枚举 QSGNode::DirtyStateBit
标志 QSGNode::DirtyState

用于QSGNode::markDirty()以指示场景图如何更改。

常数描述
QSGNode::DirtyMatrix0x0100QSGTransformNode中更改了矩阵。
QSGNode::DirtyNodeAdded0x0400添加了一个节点。
QSGNode::DirtyNodeRemoved0x0800删除了一个节点。
QSGNode::DirtyGeometry0x1000QSGGeometryNode的几何体已更改。
QSGNode::DirtyMaterial0x2000QSGGeometryNode的材质已更改。
QSGNode::DirtyOpacity0x4000QSGOpacityNode的不透明度已更改。
QSGNode:: DirtySubtreeBlocked0x0080已阻塞该子树。

The DirtyState 类型是 QFlags<DirtyStateBit> 的typedef。它存储为 DirtyStateBit 值的 OR 组合。

另见QSGNode::markDirty()。

枚举 QSGNode::Flag
标志 QSGNode::Flags

QSGNode::Flag 枚举描述了 QSGNode 上的标志

常数描述
QSGNode::OwnedByParent0x0001节点属于其父节点,当父节点被删除时将被删除。
QSGNode::UsePreprocess0x0002在开始渲染之前将调用节点虚拟的 preprocess() 函数。
QSGNode::OwnsGeometry0x00010000仅对 QSGGeometryNodeQSGClipNode 有效。节点拥有对 QSGGeometry 实例的所有权,将在节点销毁或分配几何体时删除它。
QSGNode::OwnsMaterial0x00020000仅对QSGGeometryNode有效。节点对其材质拥有所有权,当节点被销毁或材质被分配时,会删除该材质。
QSGNode::OwnsOpaqueMaterial0x00040000仅对QSGGeometryNode有效。节点对其不透明材质拥有所有权,当节点被销毁或材质被分配时,会删除该材质。
QSGNode::InternalReserved0x01000000仅作内部使用。

The Flags type is a typedef for QFlags<Flag>. It stores an OR combination of Flag values.

enum QSGNode::NodeType

可以用来确定节点的类型。

常数描述
QSGNode::BasicNodeType0QSGNode的类型
QSGNode::GeometryNodeType1QSGGeometryNode的类型
QSGNode::TransformNodeType2QSGTransformNode的类型
QSGNode::ClipNodeType3QSGClipNode的类型
QSGNode::OpacityNodeType4QSGOpacityNode的类型
QSGNode::RenderNodeType6QSGRenderNode的类型

另请参阅type

成员函数文档

QSGNode::QSGNode()

构建一个新的节点

[虚拟异常无] QSGNode::~QSGNode()

销毁节点。

此节点所有具有标志 QSGNode::OwnedByParent 设置的子项也将被删除。

void QSGNode::appendChildNode(QSGNode *node)

node添加到此节点子项列表中。

节点顺序很重要,因为几何节点将按其添加到场景图的顺序进行渲染。

int QSGNode::childAtIndex(int i) const

返回索引i的子项。

子项在内部作为链表存储,因此通过索引遍历子项是次优的。

int QSGNode::childCount() const

返回子节点数量。

QSGNode *QSGNode::firstChild() const

返回此节点的第一个子节点。

子节点以链表形式存储。

QSGNode::Flags QSGNode::flags() const

返回此节点的标志集合。

另请参阅setFlags

void QSGNode::insertChildNodeAfter(QSGNode *node, QSGNode *after)

在指定节点after之后将node插入到此节点子项列表中。

节点顺序很重要,因为几何节点将按其添加到场景图的顺序进行渲染。

void QSGNode::insertChildNodeBefore(QSGNode *node, QSGNode *before)

在指定节点before之前将node插入到此节点子项列表中。

节点顺序很重要,因为几何节点将按其添加到场景图的顺序进行渲染。

[虚拟] bool QSGNode::isSubtreeBlocked() const

返回此节点及其子树是否可用于使用。

被阻塞的子树将不会更新其脏状态,也不会被渲染。

例如,当累积的透明度为0时,QSGOpacityNode将返回一个被阻塞的子树。

QSGNode *QSGNode::lastChild() const

返回此节点的最后一个子节点。

子节点存储为链表。

void QSGNode::markDirty(QSGNode::DirtyState bits)

通知所有连接的渲染器该节点有脏

QSGNode *QSGNode::nextSibling() const

返回在父节点的子节点列表中位于此节点之后的节点。

子节点存储为链表。

QSGNode *QSGNode::parent() const

返回此节点的父节点。

void QSGNode::prependChildNode(QSGNode *node)

节点添加到此节点的子节点列表的开头。

节点顺序很重要,因为几何节点将按其添加到场景图的顺序进行渲染。

[虚函数] void QSGNode::preprocess()

重写此函数以在节点渲染之前进行节点处理。

通过设置标志QSGNode::UsePreprocess显式启用预处理。标志需要在节点被添加到场景图之前设置,并将导致每帧渲染节点时调用preprocess()函数。

警告:请注意在预处理期间删除节点。如果预处理时删除单独的节点,可能会造成轻微的性能损失。如果删除使用预处理的子树,可能会造成分段错误。这是出于性能考虑而实现的。

QSGNode *QSGNode::previousSibling() const

返回在父节点的子节点列表中位于此节点之前的节点。

子节点存储为链表。

void QSGNode::removeAllChildNodes()

从此节点的子节点列表中移除所有子节点。

void QSGNode::removeChildNode(QSGNode *node)

从此节点的子节点列表中移除节点

void QSGNode::setFlag(QSGNode::Flag f, bool enabled = true)

如果enabled为true,则在此节点上设置标志f;否则清除标志。

另请参阅标志

void QSGNode::setFlags(QSGNode::Flags f, bool enabled = true)

如果 enabled 为真,则在此节点上设置标志 f;否则清除标志。

另请参阅标志

QSGNode::NodeType QSGNode::type() const

返回此节点的类型。节点类型必须是预先定义的类型之一,在 QSGNode::NodeType 中定义,可以安全地将其转换为相应的类。

© 2024 The Qt Company Ltd. 此处包含的文档贡献是其各自所有者的版权。此处提供的文档受 GNU 自由文档许可协议版本 1.3 的条款约束,由自由软件基金会发布。Qt 及相关标志是 The Qt Company Ltd. 在芬兰以及全球其他国家的商标。所有其他商标均为其各自所有者的财产。