Probleme mit QTabWidget und RemoveTab

Alles rund um die Programmierung mit Qt
Antworten
Alci
Beiträge: 70
Registriert: 24. März 2006 23:34

Probleme mit QTabWidget und RemoveTab

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

Beitrag von upsala »

Versuch mal folgendes:

Code: Alles auswählen

while (QWidget *w=TabWidget->widget(0)) {
  TabWidget->removeTab(0);
  delete w;
}
Alci
Beiträge: 70
Registriert: 24. März 2006 23:34

Beitrag 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.
Antworten