2017-08-18 2 views
0

Ich möchte alle Root-Knoten der Root-Szene eines Qt3DWindow löschen. Es enthält mehrere Hierarchieebenen von Knoten. Ich möchte die Referenzen entfernen und die Objekte löschen. Was ist der einfachste Weg das zu tun?Wie kann ich alle Knoten rekursiv in der Root-Entität von Qt3DWindow löschen?

+1

Warum löschen Sie es nicht wie jeder andere Behälter in C++? Durchsuche jedes Objekt, das du löschen willst, ändere die Eigenschaften, die du brauchst ("Referenzen entfernen") und speichere Referenzen auf diese Objekte in irgendeiner Art von Liste. Im nächsten Schritt durchlaufen Sie jedes Element in der Liste und löschen es. Am Ende löschen Sie die Liste. Oder machen Sie die Funktion rekursiv (wie in [dieser Beitrag] (https://stackoverflow.com/a/17178168/5163799)), um die Verwendung der Liste wegzulassen. –

+0

Das funktioniert. Es sind ein paar Codezeilen (nicht nur eine), aber es funktioniert. Vielen Dank! – Codev

+0

@Codev Erwägen Sie, Ihre Lösung als Antwort zu posten. – m7913d

Antwort

0

habe ich diese rekursive Funktion, es zu tun:

void deleteChildrenRecursively(Qt3DCore::QNodeVector& vector) 
{ 
    foreach(Qt3DCore::QNode* node, vector){ 
     Qt3DCore::QEntity* entity = (Qt3DCore::QEntity*)node; 
     QList<Qt3DCore::QComponent*> componentsToDelete; 
     foreach(Qt3DCore::QComponent* component, entity->components()){ 
      entity->removeComponent(component); 
      delete(component); 
      component = NULL; 
     } 
     deleteChildrenRecursively(node->childNodes()); 
     delete(node); 
     node = NULL; 
    } 
} 

Es löscht alle QEntity und seine QComponent Objekte rekursiv.

Verbrauch:

Qt3DCore::QEntity* rootEntity = new Qt3DCore::QEntity(); 
view->setRootEntity(rootEntity) 
... 
deleteChildrenRecursively(rootEntity->childNodes()); 
Verwandte Themen