Servus,
ich versuche die Objekte in meinem Layout zu löschen. Wenn ich jedes einzelne mit delete lösche oder auf die QMap in der sich die befinden qDeleteAll anwende bekomme ich jedesmal einen Absturz.
Wenn ich stattdessen für alle Objekte in dem Map jeweils deleteLater() aufrufe klappts. Kann mir jemand erklären woran das liegen könnte?
delete QObject oder QObject->deleteLater()
debugge das ganze und schaue bei den einzelne delete ob auch die qmap kleiner wird ...
Das selbe problem hatte ich auch die aussere elemente zu deleten .. bringt nichts wenn qmap removeAt(int xx ); nicht vor delete aufgerufen wird ....
mache ein emit vor dem delete um auch aus der qmap zu entfernen...
Sonst wenn qmap immer die selbe groesse hat und du 2 elementen deletet hast .. wenn das nachste mal qmap aufgerufen ist dann sturzt er ab....
Das selbe problem hatte ich auch die aussere elemente zu deleten .. bringt nichts wenn qmap removeAt(int xx ); nicht vor delete aufgerufen wird ....
mache ein emit vor dem delete um auch aus der qmap zu entfernen...
Sonst wenn qmap immer die selbe groesse hat und du 2 elementen deletet hast .. wenn das nachste mal qmap aufgerufen ist dann sturzt er ab....
ok, wenn ich die ziele der pointer in dem qmap delete und danach wieder darauf zugreife muss das programm abstürzen, sehe ich ein. Aber beim ersten Aufruf von qDeleteAll auf das QMap? Ausserdem sollte es doch eigentlich reichen, wenn ich
mache, anstatt jedes einzeln zu löschen, oder?
Code: Alles auswählen
qDeleteAll(QMap);
QMap.clear()mikro hat geschrieben:ok, wmache, anstatt jedes einzeln zu löschen, oder?Code: Alles auswählen
qDeleteAll(QMap); QMap.clear()
wen qmap.size() null raus kommt den reicht es... es gibt keine arbeit ein
qDebug() << "### qmap.size() " << qmap.size();
hineinzu tun um die groesse zu sehen und wenn ich ein delete mache mache ich auch ein delete aus qmap und nicht alle...
ok, habe zwischenzeitlich festgestellt, dass mein Problem eigentlich noch woanders liegt: ich hatte die Objekte im layout mit findchildren versucht und da drauf delete bzw. deleteLater aufgerufen.
1) QObject::FindChildren arbeitet rekursiv, wenn man das verwendet und delete bei allem probiert was man findet, dann kann das zu Problemen führen, wenn man layouts mit kindern dabei hat - die wurden dann nämlich schon u.U. schon von ihrem parent dem layout gekillt
2) deleteLater() ist schlau genug nix zu löschen, was nicht mehr existiert, damit crasht die Applikation wenigstens nicht mehr. Allerdings kann das ein bischen dauern - dadurch passiert es anscheinend gelegentlich, dass mein Programm schon im Glauben das Objekt wäre gelöscht weiterläuft während das Objekt noch auf einen guten Zeitpunkt wartet.
1) QObject::FindChildren arbeitet rekursiv, wenn man das verwendet und delete bei allem probiert was man findet, dann kann das zu Problemen führen, wenn man layouts mit kindern dabei hat - die wurden dann nämlich schon u.U. schon von ihrem parent dem layout gekillt
2) deleteLater() ist schlau genug nix zu löschen, was nicht mehr existiert, damit crasht die Applikation wenigstens nicht mehr. Allerdings kann das ein bischen dauern - dadurch passiert es anscheinend gelegentlich, dass mein Programm schon im Glauben das Objekt wäre gelöscht weiterläuft während das Objekt noch auf einen guten Zeitpunkt wartet.