QSGNode Class

Die Klasse QSGNode ist die Basisklasse für alle Knoten im Szenegraph. Mehr...

Kopfzeile: #include <QSGNode>
CMake: find_package(Qt6 REQUIRED COMPONENTS Quick)
target_link_libraries(mytarget PRIVATE Qt6::Quick)
qmake: QT += quick
Vererbt von:

QSGBasicGeometryNode, QSGOpacityNode, QSGRenderNode, und QSGTransformNode

Öffentliche Typen

flags DirtyState
enum DirtyStateBit { DirtyMatrix, DirtyNodeAdded, DirtyNodeRemoved, DirtyGeometry, DirtyMaterial, …, DirtySubtreeBlocked }
enum Flag { OwnedByParent, UsePreprocess, OwnsGeometry, OwnsMaterial, OwnsOpaqueMaterial, InternalReserved }
flags Flags
enum NodeType { BasicNodeType, GeometryNodeType, TransformNodeType, ClipNodeType, OpacityNodeType, RenderNodeType }

Öffentliche Funktionen

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

Detaillierte Beschreibung

Die Klasse QSGNode kann als Child-Container verwendet werden. Kinder werden mit den Funktionen appendChildNode(), prependChildNode(), insertChildNodeBefore() und insertChildNodeAfter() hinzugefügt. Die Reihenfolge der Knoten ist wichtig, da die Geometrieknoten entsprechend ihrer Reihenfolge im Szenegraph gerendert werden.

Die Knoten des Szenegraphen enthalten einen Mechanismus, der beschreibt, welche Teile der Szene sich geändert haben. Dazu gehören die kombinierten Matrizen, die akkumulierte Deckkraft, Änderungen in der Knotenhierarchie usw. Diese Informationen können für Optimierungen innerhalb des Szenengraphen-Renderers verwendet werden. Damit der Renderer die Knoten richtig darstellen kann, ist es wichtig, dass die Benutzer QSGNode::markDirty() mit den richtigen Flags aufrufen, wenn Knoten geändert werden. Die meisten der Funktionen der Knotenklassen rufen implizit markDirty() auf. Zum Beispiel ruft QSGNode::appendChildNode() markDirty() mit der Übergabe von QSGNode::DirtyNodeAdded auf.

Wenn sich Knoten bei jedem Frame ändern, kann die Funktion preprocess() verwendet werden, um Änderungen an einem Knoten für jeden Frame, der gerendert wird, vorzunehmen. Die Verwendung von preprocess() muss explizit durch Setzen des QSGNode::UsePreprocess Flags auf dem Knoten aktiviert werden.

Die virtuelle Funktion isSubtreeBlocked() kann verwendet werden, um einen Teilbaum vollständig zu sperren. Knoten in einem blockierten Teilbaum werden nicht vorverarbeitet() und nicht gerendert.

Hinweis: Alle Klassen mit QSG-Präfix sollten nur im Rendering-Thread des Szenegraphs verwendet werden. Siehe Scene Graph und Rendering für weitere Informationen.

Dokumentation der Mitgliedstypen

enum QSGNode::DirtyStateBit
flags QSGNode::DirtyState

Wird in QSGNode::markDirty() verwendet, um anzuzeigen, wie sich der Szenegraph verändert hat.

KonstanteWertBeschreibung
QSGNode::DirtyMatrix0x0100Die Matrix in einer QSGTransformNode hat sich geändert.
QSGNode::DirtyNodeAdded0x0400Ein Knoten wurde hinzugefügt.
QSGNode::DirtyNodeRemoved0x0800Ein Knoten wurde entfernt.
QSGNode::DirtyGeometry0x1000Die Geometrie eines QSGGeometryNode hat sich geändert.
QSGNode::DirtyMaterial0x2000Das Material einer QSGGeometryNode hat sich geändert.
QSGNode::DirtyOpacity0x4000Die Deckkraft eines QSGOpacityNode hat sich geändert.
QSGNode::DirtySubtreeBlocked0x0080Der Teilbaum wurde blockiert.

Der Typ DirtyState ist ein Typedef für QFlags<DirtyStateBit>. Er speichert eine ODER-Kombination von DirtyStateBit-Werten.

Siehe auch QSGNode::markDirty().

enum QSGNode::Flag
flags QSGNode::Flags

Das Enum QSGNode::Flag beschreibt die Flags der QSGNode

KonstanteWertBeschreibung
QSGNode::OwnedByParent0x0001Der Knoten ist im Besitz seines Elternteils und wird gelöscht, wenn der Elternteil gelöscht wird.
QSGNode::UsePreprocess0x0002Die virtuelle Funktion preprocess() des Knotens wird aufgerufen, bevor das Rendern beginnt.
QSGNode::OwnsGeometry0x00010000Nur gültig für QSGGeometryNode und QSGClipNode. Der Knoten ist Eigentümer der Instanz QSGGeometry und wird gelöscht, wenn der Knoten zerstört wird oder eine Geometrie zugewiesen wird.
QSGNode::OwnsMaterial0x00020000Gilt nur für QSGGeometryNode. Der Knoten ist Eigentümer des Materials und löscht es, wenn der Knoten zerstört oder ein Material zugewiesen wird.
QSGNode::OwnsOpaqueMaterial0x00040000Gilt nur für QSGGeometryNode. Der Knoten ist Eigentümer des opaken Materials und löscht es, wenn der Knoten zerstört oder ein Material zugewiesen wird.
QSGNode::InternalReserved0x01000000Reserviert für interne Zwecke.

Der Typ Flags ist ein Typedef für QFlags<Flag>. Er speichert eine ODER-Kombination von Flag-Werten.

enum QSGNode::NodeType

Kann verwendet werden, um den Typ des Knotens herauszufinden.

KonstanteWertBeschreibung
QSGNode::BasicNodeType0Der Typ von QSGNode
QSGNode::GeometryNodeType1Der Typ von QSGGeometryNode
QSGNode::TransformNodeType2Der Typ von QSGTransformNode
QSGNode::ClipNodeType3Der Typ von QSGClipNode
QSGNode::OpacityNodeType4Der Typ von QSGOpacityNode
QSGNode::RenderNodeType6Der Typ von QSGRenderNode

Siehe auch type().

Dokumentation der Mitgliedsfunktionen

QSGNode::QSGNode()

Konstruiert einen neuen Knoten

[virtual noexcept] QSGNode::~QSGNode()

Zerstört den Knoten.

Jedes Kind dieses Knotens, bei dem das Flag QSGNode::OwnedByParent gesetzt ist, wird ebenfalls gelöscht.

void QSGNode::appendChildNode(QSGNode *node)

Hängt node an die Liste der Kinder dieses Knotens an.

Die Reihenfolge der Knoten ist wichtig, da die Geometrieknoten in der Reihenfolge gerendert werden, in der sie dem Szenengraph hinzugefügt werden.

QSGNode *QSGNode::childAtIndex(int i) const

Gibt das Kind mit dem Index i zurück.

Untergeordnete Elemente werden intern als verknüpfte Liste gespeichert, so dass die Iteration über die untergeordneten Elemente über den Index suboptimal ist.

int QSGNode::childCount() const

Gibt die Anzahl der Kindknoten zurück.

QSGNode *QSGNode::firstChild() const

Gibt das erste Kind dieses Knotens zurück.

Die Kinder werden in einer verknüpften Liste gespeichert.

QSGNode::Flags QSGNode::flags() const

Gibt die Menge der Flaggen für diesen Knoten zurück.

Siehe auch setFlags().

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

Fügt node in die Liste der Kinder dieses Knotens nach dem mit after angegebenen Knoten ein.

Die Reihenfolge der Knoten ist wichtig, da die Geometrieknoten in der Reihenfolge gerendert werden, in der sie dem Szenengraph hinzugefügt werden.

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

Fügt node in die Liste der Kinder dieses Knotens vor dem mit before angegebenen Knoten ein.

Die Reihenfolge der Knoten ist wichtig, da die Geometrieknoten in der Reihenfolge gerendert werden, in der sie dem Szenengraph hinzugefügt werden.

[virtual] bool QSGNode::isSubtreeBlocked() const

Gibt zurück, ob dieser Knoten und sein Teilbaum für die Verwendung verfügbar sind.

Bei blockierten Teilbäumen wird der Dirty-Status nicht aktualisiert und sie werden nicht gerendert.

QSGOpacityNode gibt einen blockierten Teilbaum zurück, wenn die akkumulierte Opazität z. B. 0 ist.

QSGNode *QSGNode::lastChild() const

Gibt das letzte Kind dieses Knotens zurück.

Die Kinder werden als verknüpfte Liste gespeichert.

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

Benachrichtigt alle angeschlossenen Renderer, dass der Knoten schmutzig ist bits.

QSGNode *QSGNode::nextSibling() const

Gibt den Knoten zurück, der in der Liste der Kinder des Elternteils auf diesen folgt.

Die Kinder werden als verknüpfte Liste gespeichert.

QSGNode *QSGNode::parent() const

Gibt den übergeordneten Knoten dieses Knotens zurück.

void QSGNode::prependChildNode(QSGNode *node)

Stellt node der Liste der Kinder dieses Knotens voran.

Die Reihenfolge der Knoten ist wichtig, da die Geometrieknoten in der Reihenfolge gerendert werden, in der sie dem Szenengraph hinzugefügt werden.

[virtual] void QSGNode::preprocess()

Überschreiben Sie diese Funktion, um den Knoten zu verarbeiten, bevor er gerendert wird.

Die Vorverarbeitung muss explizit durch Setzen des Flags QSGNode::UsePreprocess aktiviert werden. Das Flag muss gesetzt werden, bevor der Knoten zum Szenengraph hinzugefügt wird, und führt dazu, dass die Funktion preprocess() für jedes Bild, in dem der Knoten gerendert wird, aufgerufen wird.

Warnung: Hüten Sie sich davor, Knoten zu löschen, während sie vorverarbeitet werden. Es ist möglich, einen einzelnen Knoten während seines eigenen Preprocess-Aufrufs zu löschen, allerdings mit einem kleinen Leistungseinbruch. Das Löschen eines Teilbaums mit Knoten, die ebenfalls vorverarbeitet werden, kann zu einem Segmentierungsfehler führen. Dies geschieht aus Leistungsgründen.

QSGNode *QSGNode::previousSibling() const

Gibt den Knoten vor diesem in der Liste der Kinder des Elternteils zurück.

Die Kinder werden in einer verknüpften Liste gespeichert.

void QSGNode::removeAllChildNodes()

Entfernt alle Kindknoten aus der Liste der Kinder dieses Knotens.

void QSGNode::removeChildNode(QSGNode *node)

Entfernt node aus der Liste der Kinder dieses Knotens.

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

Setzt das Kennzeichen f an diesem Knoten, wenn enabled wahr ist; andernfalls wird das Kennzeichen gelöscht.

Siehe auch flags().

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

Setzt die Flags f auf diesem Knoten, wenn enabled wahr ist; andernfalls werden die Flags gelöscht.

Siehe auch flags().

QSGNode::NodeType QSGNode::type() const

Gibt den Typ dieses Knotens zurück. Der Knotentyp muss einer der vordefinierten Typen sein, die in QSGNode::NodeType definiert sind, und kann sicher zum Casting auf die entsprechende Klasse verwendet werden.

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