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());
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. –
Das funktioniert. Es sind ein paar Codezeilen (nicht nur eine), aber es funktioniert. Vielen Dank! – Codev
@Codev Erwägen Sie, Ihre Lösung als Antwort zu posten. – m7913d