QMap<int, QWidget*> und clear()

Alles rund um die Programmierung mit Qt
Antworten
madRenEGadE
Beiträge: 52
Registriert: 10. Februar 2006 15:15

QMap<int, QWidget*> und clear()

Beitrag von madRenEGadE »

Was passiert mit mit new erstellten QWidgets wenn ich clear() auf QMap aufrufe? Werden diese dann gelöscht oder nur der Zeiger auf das jeweilige Widget gelöscht?
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

QMap wird geleert. Mit den QWidgets passiert selbst nichts.
madRenEGadE
Beiträge: 52
Registriert: 10. Februar 2006 15:15

Beitrag von madRenEGadE »

und wie muss ich die entsprechenden widgets löschen?
es geht nicht wenn ich folgendes mache:

Code: Alles auswählen

QMap<int, QWidget*> map;
delete map[1];
[quote]

die 1 ist jetzt nur ein beispiel....[/quote]
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Ungetestet:

Code: Alles auswählen

QMapIterator<int, QWidget *> it(map);
while (it.hasNext()) {
  it.next();
  delete it.value();
}
map.clear();
Esleborn
Beiträge: 265
Registriert: 27. Januar 2005 01:23
Wohnort: Baden-Würtenberg
Kontaktdaten:

Beitrag von Esleborn »

ich würd folgendes machen:

Code: Alles auswählen

for ( QMapIterator < int, QWidget * > it = map.begin ( ); it != map.end ( ); )
{
   if ( it.value ( ) != NULL )
      delete it.value ( );
   it = map.erase ( it );
}
Dann hat man wenigstens alles gleichzeit gemacht ;)

Elgrimm Esleborn
Glaube an eine Lösung, nur dann kannst du auch eine finden.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Das

Code: Alles auswählen

if ( it.value ( ) != NULL )
ist übrigens unnötig, da

Code: Alles auswählen

delete 0;
in C++ erlaubt ist
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Oder man nimmt einfach qDeleteAll(map)
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten