QSGNode 类
QSGNode 类是场景图上所有节点的基类。 更多...
头文件 | #include <QSGNode> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Quick) target_link_libraries(mytarget PRIVATE Qt6::Quick) |
qmake | QT += quick |
继承自 | QSGBasicGeometryNode,QSGOpacityNode,QSGRenderNode 和 QSGTransformNode |
- 所有成员列表,包括继承成员
- QSGNode 是 Qt Quick 场景图节点类 的一部分。
公共类型
flags | DirtyState |
枚举 | 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() |
void | appendChildNode(QSGNode *node) |
QSGNode * | childAtIndex(int i) const |
int | childCount() const |
QSGNode * | firstChild() const |
QSGNode::Flags | flags() const |
void | insertChildNodeAfter(QSGNode *node, QSGNode *after) |
void | insertChildNodeBefore(QSGNode *node, QSGNode *before) |
virtual bool | isSubtreeBlocked() const |
QSGNode * | lastChild() const |
void | markDirty(QSGNode::DirtyState bits) |
QSGNode * | nextSibling() const |
QSGNode * | parent() const |
void | prependChildNode(QSGNode *node) |
virtual void | preprocess() |
QSGNode * | previousSibling() const |
void | removeAllChildNodes() |
void | removeChildNode(QSGNode *node) |
void | setFlag(QSGNode::Flag f, bool enabled = true) |
void | setFlags(QSGNode::Flags f, bool enabled = true) |
QSGNode::NodeType | type() 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::DirtyMatrix | 0x0100 | 在QSGTransformNode中更改了矩阵。 |
QSGNode::DirtyNodeAdded | 0x0400 | 添加了一个节点。 |
QSGNode::DirtyNodeRemoved | 0x0800 | 删除了一个节点。 |
QSGNode::DirtyGeometry | 0x1000 | QSGGeometryNode的几何体已更改。 |
QSGNode::DirtyMaterial | 0x2000 | QSGGeometryNode的材质已更改。 |
QSGNode::DirtyOpacity | 0x4000 | QSGOpacityNode的不透明度已更改。 |
QSGNode:: DirtySubtreeBlocked | 0x0080 | 已阻塞该子树。 |
The DirtyState 类型是 QFlags<DirtyStateBit> 的typedef。它存储为 DirtyStateBit 值的 OR 组合。
另见QSGNode::markDirty()。
枚举 QSGNode::Flag
标志 QSGNode::Flags
QSGNode::Flag 枚举描述了 QSGNode 上的标志
常数 | 值 | 描述 |
---|---|---|
QSGNode::OwnedByParent | 0x0001 | 节点属于其父节点,当父节点被删除时将被删除。 |
QSGNode::UsePreprocess | 0x0002 | 在开始渲染之前将调用节点虚拟的 preprocess() 函数。 |
QSGNode::OwnsGeometry | 0x00010000 | 仅对 QSGGeometryNode 和 QSGClipNode 有效。节点拥有对 QSGGeometry 实例的所有权,将在节点销毁或分配几何体时删除它。 |
QSGNode::OwnsMaterial | 0x00020000 | 仅对QSGGeometryNode有效。节点对其材质拥有所有权,当节点被销毁或材质被分配时,会删除该材质。 |
QSGNode::OwnsOpaqueMaterial | 0x00040000 | 仅对QSGGeometryNode有效。节点对其不透明材质拥有所有权,当节点被销毁或材质被分配时,会删除该材质。 |
QSGNode::InternalReserved | 0x01000000 | 仅作内部使用。 |
The Flags type is a typedef for QFlags<Flag>. It stores an OR combination of Flag values.
enum QSGNode::NodeType
可以用来确定节点的类型。
常数 | 值 | 描述 |
---|---|---|
QSGNode::BasicNodeType | 0 | QSGNode的类型 |
QSGNode::GeometryNodeType | 1 | QSGGeometryNode的类型 |
QSGNode::TransformNodeType | 2 | QSGTransformNode的类型 |
QSGNode::ClipNodeType | 3 | QSGClipNode的类型 |
QSGNode::OpacityNodeType | 4 | QSGOpacityNode的类型 |
QSGNode::RenderNodeType | 6 | QSGRenderNode的类型 |
另请参阅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. 在芬兰以及全球其他国家的商标。所有其他商标均为其各自所有者的财产。