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 |
- Liste aller Mitglieder, einschließlich geerbter Mitglieder
- QSGNode ist Teil der Qt Quick -Klassen für Szenengraph-Knoten.
Ö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.
| Konstante | Wert | Beschreibung |
|---|---|---|
QSGNode::DirtyMatrix | 0x0100 | Die Matrix in einem „ QSGTransformNode “ hat sich geändert. |
QSGNode::DirtyNodeAdded | 0x0400 | Ein Knoten wurde hinzugefügt. |
QSGNode::DirtyNodeRemoved | 0x0800 | Ein Knoten wurde entfernt. |
QSGNode::DirtyGeometry | 0x1000 | Die Geometrie eines „ QSGGeometryNode “ hat sich geändert. |
QSGNode::DirtyMaterial | 0x2000 | Das Material eines „ QSGGeometryNode “ hat sich geändert. |
QSGNode::DirtyOpacity | 0x4000 | Die Deckkraft eines „ QSGOpacityNode “ hat sich geändert. |
QSGNode::DirtySubtreeBlocked | 0x0080 | Der 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
| Konstante | Wert | Beschreibung |
|---|---|---|
QSGNode::OwnedByParent | 0x0001 | Der Knoten gehört zu seinem übergeordneten Knoten und wird gelöscht, wenn der übergeordnete Knoten gelöscht wird. |
QSGNode::UsePreprocess | 0x0002 | Die virtuelle Funktion „ preprocess()“ des Knotens wird vor Beginn der Darstellung aufgerufen. |
QSGNode::OwnsGeometry | 0x00010000 | Gilt 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::OwnsMaterial | 0x00020000 | Gilt 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::OwnsOpaqueMaterial | 0x00040000 | Gilt 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::InternalReserved | 0x01000000 | Fü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.
| Konstante | Wert | Beschreibung |
|---|---|---|
QSGNode::BasicNodeType | 0 | Der Typ des QSGNode |
QSGNode::GeometryNodeType | 1 | Der Typ von QSGGeometryNode |
QSGNode::TransformNodeType | 2 | Der Typ von QSGTransformNode |
QSGNode::ClipNodeType | 3 | Die Art von QSGClipNode |
QSGNode::OpacityNodeType | 4 | Die Art von QSGOpacityNode |
QSGNode::RenderNodeType | 6 | Die 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.