Auf dieser Seite

QSGNode Class

Die Klasse „QSGNode“ ist die Basisklasse für alle Knoten im Szenengraphen. Mehr...

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

QSGBasicGeometryNode, QSGOpacityNode, QSGRenderNode sowie 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

Ausführliche Beschreibung

Die Klasse „QSGNode“ kann als übergeordneter Container verwendet werden. Untergeordnete Elemente werden mit den Methoden „ appendChildNode()“, „ prependChildNode()“, „ insertChildNodeBefore()“ und „ insertChildNodeAfter()“ hinzugefügt. Die Reihenfolge der Knoten ist wichtig, da Geometrieknoten entsprechend ihrer Reihenfolge im Szenengraphen gerendert werden.

Die Knoten des Szenengraphen enthalten einen Mechanismus, der beschreibt, welche Teile der Szene sich geändert haben. Dazu gehören die kombinierten Matrizen, die akkumulierte Deckkraft, Änderungen an der Knotenhierarchie und so weiter. Diese Informationen können für Optimierungen innerhalb des Szenengraph-Renderers genutzt werden. Damit der Renderer die Knoten korrekt rendern kann, ist es wichtig, dass Benutzer bei Änderungen an Knoten die Funktion ` QSGNode::markDirty()` mit den richtigen Flags aufrufen. Die meisten Funktionen der Knotenklassen rufen implizit ` markDirty()` auf. Beispielsweise ruft ` QSGNode::appendChildNode()` die Funktion ` markDirty()` auf und übergibt dabei ` QSGNode::DirtyNodeAdded`.

Wenn sich Knoten in jedem Frame ändern, kann die Funktion „ preprocess()“ verwendet werden, um Änderungen an einem Knoten bei jedem Frame, in dem er gerendert wird, anzuwenden. Die Verwendung von „ preprocess()“ muss explizit aktiviert werden, indem das Flag „ QSGNode::UsePreprocess “ für den Knoten gesetzt wird.

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

Hinweis: Alle Klassen mit dem Präfix „QSG“ sollten ausschließlich im Rendering-Thread des Szenengraphen verwendet werden. Weitere Informationen finden Sie unter „Szenengraph und Rendering “.

Dokumentation zu Mitgliedstypen

enum QSGNode::DirtyStateBit
flags QSGNode::DirtyState

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

KonstanteWertBeschreibung
QSGNode::DirtyMatrix0x0100Die Matrix in einem „ 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 eines „ QSGGeometryNode “ hat sich geändert.
QSGNode::DirtyOpacity0x4000Die Deckkraft eines „ QSGOpacityNode “ hat sich geändert.
QSGNode::DirtySubtreeBlocked0x0080Der Teilbaum wurde gesperrt.

Der Typ „DirtyState“ ist ein typedef für QFlags<DirtyStateBit>. Er speichert eine ODER-Verknüpfung von DirtyStateBit-Werten.

Siehe auch „ QSGNode::markDirty()“.

enum QSGNode::Flag
flags QSGNode::Flags

Die Aufzählung „QSGNode::Flag“ beschreibt Flags für den QSGNode

KonstanteWertBeschreibung
QSGNode::OwnedByParent0x0001Der Knoten gehört zu seinem übergeordneten Knoten und wird gelöscht, wenn der übergeordnete Knoten gelöscht wird.
QSGNode::UsePreprocess0x0002Die virtuelle Funktion „ preprocess()“ des Knotens wird vor Beginn der Darstellung aufgerufen.
QSGNode::OwnsGeometry0x00010000Gilt nur für „ QSGGeometryNode “ und „ QSGClipNode “. Der Knoten besitzt die Instanz „ QSGGeometry “ und löscht diese, 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 wird oder ein Material zugewiesen wird.
QSGNode::OwnsOpaqueMaterial0x00040000Gilt nur für „ QSGGeometryNode “. Der Knoten ist Eigentümer des undurchsichtigen Materials und löscht es, wenn der Knoten zerstört wird oder ein Material zugewiesen wird.
QSGNode::InternalReserved0x01000000Für den internen Gebrauch reserviert.

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 Knotentyp zu ermitteln.

KonstanteWertBeschreibung
QSGNode::BasicNodeType0Der Typ des QSGNode
QSGNode::GeometryNodeType1Der Typ von QSGGeometryNode
QSGNode::TransformNodeType2Der Typ von QSGTransformNode
QSGNode::ClipNodeType3Die Art von QSGClipNode
QSGNode::OpacityNodeType4Die Art von QSGOpacityNode
QSGNode::RenderNodeType6Die Art von QSGRenderNode

Siehe auch type().

Dokumentation zu den Member-Funktionen

QSGNode::QSGNode()

Erstellt einen neuen Knoten

[virtual noexcept] QSGNode::~QSGNode()

Löscht den Knoten.

Jedes untergeordnete Element dieses Knotens, bei dem das Flag „ QSGNode::OwnedByParent “ gesetzt ist, wird ebenfalls gelöscht.

void QSGNode::appendChildNode(QSGNode *node)

Fügt „ node “ zur Liste der untergeordneten Knoten dieses Knotens hinzu.

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

QSGNode *QSGNode::childAtIndex(int i) const

Gibt das untergeordnete Element am Index i zurück.

Kinder werden intern als verkettete Liste gespeichert, daher ist das Durchlaufen der Kinder über den Index nicht optimal.

int QSGNode::childCount() const

Gibt die Anzahl der untergeordneten Knoten zurück.

QSGNode *QSGNode::firstChild() const

Gibt das erste untergeordnete Element dieses Knotens zurück.

Die untergeordneten Knoten werden in einer verketteten Liste gespeichert.

QSGNode::Flags QSGNode::flags() const

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

Siehe auch „ setFlags()“.

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

Fügt „ node “ in die Liste der untergeordneten Knoten dieses Knotens ein, und zwar hinter dem mit „ after “ angegebenen Knoten.

Die Reihenfolge der Knoten ist wichtig, da Geometrie-Knoten in der Reihenfolge gerendert werden, in der sie dem Szenenbaum hinzugefügt werden.

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

Fügt „ node “ in die Liste der untergeordneten Knoten dieses Knotens ein, und zwar vor dem Knoten, der mit „ before “ angegeben wurde.

Die Reihenfolge der Knoten ist wichtig, da Geometrieknoten in der Reihenfolge gerendert werden, in der sie zum Szenengraphen hinzugefügt werden.

[virtual] bool QSGNode::isSubtreeBlocked() const

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

Bei gesperrten Teilbäumen werden die „Dirty“-Zustände nicht aktualisiert und sie werden nicht gerendert.

Die Funktion „ QSGOpacityNode “ gibt beispielsweise einen gesperrten Teilbaum zurück, wenn die akkumulierte Deckkraft 0 beträgt.

QSGNode *QSGNode::lastChild() const

Gibt das letzte untergeordnete Element dieses Knotens zurück.

Die untergeordneten Knoten werden als verkettete Liste gespeichert.

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

Teilt allen verbundenen Renderern mit, dass der Knoten geänderte Daten enthält bits.

QSGNode *QSGNode::nextSibling() const

Gibt den Knoten zurück, der in der Liste der Kinder des übergeordneten Knotens als Nächstes folgt.

Die Kinder werden als verkettete Liste gespeichert.

QSGNode *QSGNode::parent() const

Gibt den übergeordneten Knoten dieses Knotens zurück.

void QSGNode::prependChildNode(QSGNode *node)

Fügt „ node “ am Anfang der Liste der untergeordneten Knoten dieses Knotens ein.

Die Reihenfolge der Knoten ist wichtig, da Geometrieknoten in der Reihenfolge gerendert werden, in der sie zum Szenengraphen hinzugefügt werden.

[virtual] void QSGNode::preprocess()

Überschreiben Sie diese Funktion, um den Knoten vor dem Rendern zu bearbeiten.

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

Warnung: Achten Sie darauf , Knoten nicht zu löschen, während sie vorverarbeitet werden. Es ist möglich, mit einem geringen Leistungseinbußen einen einzelnen Knoten während seines eigenen preprocess-Aufrufs zu löschen. Das Löschen eines Teilbaums, der Knoten enthält, die ebenfalls die Vorverarbeitung nutzen, kann zu einem Segmentierungsfehler führen. Dies geschieht aus Leistungsgründen.

QSGNode *QSGNode::previousSibling() const

Gibt den Knoten zurück, der in der Liste der Kinder des übergeordneten Knotens direkt davor steht.

Die untergeordneten Knoten werden als verkettete Liste gespeichert.

void QSGNode::removeAllChildNodes()

Entfernt alle untergeordneten Knoten aus der Liste der untergeordneten Knoten dieses Knotens.

void QSGNode::removeChildNode(QSGNode *node)

Entfernt „ node “ aus der Liste der untergeordneten Elemente dieses Knotens.

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

Setzt das Flag „ f “ für diesen Knoten, wenn „ enabled “ wahr ist; andernfalls wird das Flag zurückgesetzt.

Siehe auch flags().

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

Setzt die Flags „ f “ für diesen Knoten, wenn „ enabled “ wahr ist; andernfalls werden die Flags zurückgesetzt.

Siehe auch flags().

QSGNode::NodeType QSGNode::type() const

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

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