Seite 1 von 1

QListWidget Speicherverwaltung??

Verfasst: 28. November 2006 16:01
von Triple{X}
Also ich habe so meine Probleme mit der QListWidget-Klasse. Wenn ich einzelne Einträge hinzufügen/entfernen/manipulieren will, muss ich ja dazu zwangsläufig einen QListWidgetObject-Zeiger erstellen. Aber leider habe ich desöfteren Probleme mit der Speicherverwaltung(segemntation fault). Im Qt-Assistant steht, dass, wenn man ein QListWidgetObject mit der takeItem(int row) Funktion aus der Liste entfernt, man es selbst löschen muss:
QListWidgetItem * QListWidget::takeItem ( int row )
Removes and returns the item from the given row in the list widget; otherwise returns 0.
Items removed from a list widget will not be managed by Qt, and will need to be deleted manually.
Aber wie sieht das jetzt aus, wenn ich mit insertItem ( int row, QListWidgetItem * item ) ein neues Item in die Liste einfügen will? Macht qt dann davon eine Kopie, muss ich das löschen, oder behalten?

Verfasst: 28. November 2006 16:57
von upsala
Nein, QListWidget legt keine Kopie ab. Wozu auch, dafür hast du ja einen Pointer übergeben. Die Zeiger mußt du dir nicht merken, außer du brauchst sie noch für andere Aufgaben...

Verfasst: 28. November 2006 17:43
von Triple{X}
Nein, QListWidget legt keine Kopie ab. Wozu auch, dafür hast du ja einen Pointer übergeben. Die Zeiger mußt du dir nicht merken, außer du brauchst sie noch für andere Aufgaben...
Also kann ich dann einfach den Zeiger, den ich übergeben habe NULL setzen, oder ihn nochmal mit new benutzen??

Verfasst: 28. November 2006 18:03
von upsala
Ja klar, Leute ihr habt ja komische Fragen...

Verfasst: 25. Mai 2007 12:49
von rkern
Hallo,

und wer gibt dann den Speicher der dynamisch anglegten QListWidgetItems's wieder frei? Macht das dann das QListWidget, z.B. bei clear()?

Verfasst: 25. Mai 2007 16:27
von upsala
Aus der Doku:
The list widget will take ownership of the item.

Verfasst: 29. Mai 2007 08:53
von rkern
Hallo upsala,

Danke für den Hinweis, ich hoffe nun das diese Verhalten auch für die Version 4.1.4 zutrifft, bzw. ich gehe einmal davon aus, da dies in der 4.1.4 Doku nicht so beschrieben ist, eigentlich garnicht.
Und um der Frage "vorzugeugen", warum ich nicht die Aktuelle Qt Version verwende, "Nein das darf ich nicht, der Kunde schreibt 4.1.4 vor".

Gruß und Dank,

Roland Kern

Verfasst: 29. Mai 2007 09:09
von upsala
Man kann sich auch die Sourcen anschaun. Wenn in der Funktion clear() ein delete verwendet wird, dann sollte alles passen...