QListWidget Speicherverwaltung??

Alles rund um die Programmierung mit Qt
Antworten
Triple{X}
Beiträge: 5
Registriert: 10. November 2006 22:19

QListWidget Speicherverwaltung??

Beitrag 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?
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag 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...
Triple{X}
Beiträge: 5
Registriert: 10. November 2006 22:19

Beitrag 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??
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Ja klar, Leute ihr habt ja komische Fragen...
rkern
Beiträge: 10
Registriert: 10. April 2007 15:10
Wohnort: Neuberg

Beitrag 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()?
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Aus der Doku:
The list widget will take ownership of the item.
rkern
Beiträge: 10
Registriert: 10. April 2007 15:10
Wohnort: Neuberg

Beitrag 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
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Man kann sich auch die Sourcen anschaun. Wenn in der Funktion clear() ein delete verwendet wird, dann sollte alles passen...
Antworten