Seite 1 von 1

Probleme mit QTabWidget und RemoveTab

Verfasst: 24. März 2006 23:48
von Alci
Hallo,

ich bin relativ unerfahren, was QT angeht. Ich habe ein Fenster erstellt, mit dem ein Benutzer mit Ctrl+T ein Tab öffnen kann und mit Ctrl+W das aktive Tab schließen kann.

Nun wollte ich noch folgende Funktionalitäten einbauen:
- schließen aller geöffneten Tabs
- schließen aller Tabs, außer den aktuellen

Das schließen des aktuell aktiven Tabs funktioniert einwandfrei, aber leider nicht die anderen Funktionen. Mein Code schaut wie folgt aus:

Code: Alles auswählen

//schließen aller Tabs
int nCount = TabWidget->count();
for (int i = 0; i < nCount; ++i)
{
QWidget* widget = TabWidget->widget(i);
if (widget != NULL) //selbst wenn ich das weglasse, klappt es nicht
{
delete widget;
TabWidget->removeTab(i);
}
}

//schließen aller übrigen Tabs
int nCount = TabWidget->count();
for (int i = 0; i < nCount; ++i)
{
if (i = TabWidget->currentIndex())
{
QWidget* widget = TabWidget->widget(i);
if (widget != NULL)
{
delete widget;
TabWidget->removeTab(i);
}
}
}
Wenn ich das so ausführe, schließt er mir nicht alle Tabs, sondern vielleicht nur die Hälfte. Beim zweiten Aufruf schließt er mir wieder ein paar und beim dritten Aufruf wieder usw.
Aber es werden nicht alle Tabs beim ersten Funktionsaufruf geschlossen bzw. nur wenn es wenige sind - so ca. bei 5 Tabs werde diese 5 auch geschlossen.

Was mache ich falsch? Ich weiß echt nicht, wo das Problem liegt.
Bitte um Hilfe.

MfG, Alci.

Verfasst: 25. März 2006 08:18
von upsala
Versuch mal folgendes:

Code: Alles auswählen

while (QWidget *w=TabWidget->widget(0)) {
  TabWidget->removeTab(0);
  delete w;
}

Verfasst: 25. März 2006 12:44
von Alci
Juhu, vielen Dank, funktioniert.
Mein Problem war es, dass ich von vorne angefangen habe die Tabs zu schließen. Aber man sollte (wenn man es jetzt über index machen möchte) alle Tabs von hinten schließen, dann geht's. Ist ja auch logisch, den wenn vorne ein Tab geschlossen wird, werden alle hinteren Tabs sozusagen nach vorne geschoben.