So löschen Sie alle QGraphicsItem aus QGraphicsScene

9

Ich habe eine abgeleitete Klasse aus QGraphicsScene geschrieben. An einem Punkt muss ich alle Elemente aus der Szene entfernen und möchte, dass die Objekte physisch zerstört werden (Destruktor wird aufgerufen). Ich habe folgendes versucht:

%Vor%

Qt Creator gibt eine Warnung aus: Warnung: C4150: Löschen des Zeigers auf unvollständigen Typ 'QGraphicsItem'; kein Destruktor namens

Ich bin mir nicht sicher, warum das so ist. QGraphicsItem hat einen virtuellen Destruktor, so dass die Elemente aus dem Speicher gelöscht werden sollten.

Wenn das nicht der richtige Weg ist, wie kann ich alle QGraphicsItem s von QGraphicsScene löschen? Beachten Sie, dass ich weiß, wenn die Szene gelöscht wird, werden alle Elemente auch gelöscht. Aber ich möchte Objekte aus der Szene entfernen und andere Objekte zeichnen. Ich möchte, dass die entfernten Objekte aus dem Speicher gelöscht werden.

    
Donotalo 15.09.2011, 12:47
quelle

3 Antworten

17

Sie können alle Elemente mit QGraphicsScene :: clear () entfernen und löschen.

    
alexisdm 15.09.2011, 14:21
quelle
10
___ qstnhdr ___ So löschen Sie alle QGraphicsItem aus QGraphicsScene ___ tag123c ___ C ++ ist eine universelle Programmiersprache. Es wurde ursprünglich als Erweiterung von C entworfen und behält eine ähnliche Syntax, ist aber jetzt eine komplett andere Sprache. Verwenden Sie dieses Tag für Fragen zu Code, der mit einem C ++ - Compiler kompiliert werden soll. ___ answer7431148 ___

Sie müssen

%Vor%

in dieser Datei. Andernfalls weiß der Compiler nicht, was QGraphicsScene::removeItem() ist, dass er einen virtuellen Destruktor hat usw.

    
___ tag123qt ___ Qt ist ein plattformübergreifendes Anwendungsentwicklungs-Framework, das häufig für die Entwicklung von Anwendungssoftware verwendet wird, die auf verschiedenen Software- und Hardwareplattformen ohne oder mit nur geringer Änderung der zugrundeliegenden Codebasis ausgeführt werden kann. Qt ist sowohl mit kommerziellen als auch mit Open-Source-Lizenzen verfügbar. ___ tag123incompletype ___ In den C- und C ++ - Sprachen fehlt einem unvollständigen Typ "genügend Information, um die Größe von Objekten dieses Typs zu bestimmen." (Beispiele: Arrays mit variabler Länge, Vorwärtsdeklarationen von 'struct's und der Typ' void '.) ___ answer7432413 ___

Sie können alle Elemente mit QGraphicsScene :: clear () entfernen und löschen.

    
___ qstntxt ___

Ich habe eine abgeleitete Klasse aus QGraphicsItem::~QGraphicsItem() geschrieben. An einem Punkt muss ich alle Elemente aus der Szene entfernen und möchte, dass die Objekte physisch zerstört werden (Destruktor wird aufgerufen). Ich habe folgendes versucht:

%Vor%

Qt Creator gibt eine Warnung aus: Warnung: C4150: Löschen des Zeigers auf unvollständigen Typ 'QGraphicsItem'; kein Destruktor namens

Ich bin mir nicht sicher, warum das so ist. QGraphicsItem hat einen virtuellen Destruktor, so dass die Elemente aus dem Speicher gelöscht werden sollten.

Wenn das nicht der richtige Weg ist, wie kann ich alle QGraphicsItem s von QGraphicsScene löschen? Beachten Sie, dass ich weiß, wenn die Szene gelöscht wird, werden alle Elemente auch gelöscht. Aber ich möchte Objekte aus der Szene entfernen und andere Objekte zeichnen. Ich möchte, dass die entfernten Objekte aus dem Speicher gelöscht werden.

    
___
Stephen Chu 15.09.2011 13:48
quelle
7

Sie müssen

%Vor%

in dieser Datei. Andernfalls weiß der Compiler nicht, was QGraphicsItem ist, dass er einen virtuellen Destruktor hat usw.

    
jpalecek 15.09.2011 12:51
quelle

Tags und Links