Seite 1 von 1

QMap<int, QWidget*> und clear()

Verfasst: 2. April 2006 18:11
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?

Verfasst: 2. April 2006 19:10
von FlorianBecker
QMap wird geleert. Mit den QWidgets passiert selbst nichts.

Verfasst: 2. April 2006 19:19
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]

Verfasst: 2. April 2006 20:02
von upsala
Ungetestet:

Code: Alles auswählen

QMapIterator<int, QWidget *> it(map);
while (it.hasNext()) {
  it.next();
  delete it.value();
}
map.clear();

Verfasst: 2. April 2006 21:30
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

Verfasst: 2. April 2006 21:54
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

Verfasst: 2. April 2006 22:00
von Christian81
Oder man nimmt einfach qDeleteAll(map)