Seite 1 von 1

Einzelne Tabs von tabWidget verstecken

Verfasst: 17. Februar 2010 12:21
von Teetrinker
Hallö,

ich stehe momentan vor einem kleinen technischen Problem. Ich habe in meiner Anwendung ein tabWidget eingefügt mit mehreren Tabs. Um das alles übersichtlicher zu machen, würde ich gerne derzeitig nicht relevante Tabs einfach unsichtbar machen, allerdings klappt das nicht.

Wenn ich z.B. mit

Code: Alles auswählen

 ui->tabWidget->currentWidget()->hide();
 ui->tabWidget->currentWidget()->setHidden(true);
 ui->tabWidget->widget(1)->hide();
versuche ein Tab unsichtbar zu machen, passiert nichts. Ist das nicht vorgesehen, dass man Tabs unsichtbar machen kann? Würde nur ungern mit removeTab den ganzen Tab löschen, weil ich dann den Inhalt des Tabs selber erstellen muss.
Ach ja, benutzte Qt 4.6.2 unter Linux.

Grüße,
Teetrinker

Re: Einzelne Tabs von tabWidget verstecken

Verfasst: 17. Februar 2010 12:31
von franzf
Teetrinker hat geschrieben: Würde nur ungern mit removeTab den ganzen Tab löschen, weil ich dann den Inhalt des Tabs selber erstellen muss.
removeTab ist die einzige Möglichkeit. Dabei wird das widget nicht gelöscht, du kannst dir den Pointer also speichern (hast wahrscheinlich eh shcon gespeichert, um einfach auf dessen Inhalt zugreifen zu können). Wenn du das Tab wieder anzeigen willst, füge es einfach wieder ein - fertig.
Problematisch könnte es werden, wenn du mehrere Tabs entfernen und später wieder hinzufügen willst, da du nicht einfach an die selbe Stelle einfügen kannst. Ein bisschen mit QMap<QWidget*, int /*index*/> spielen, und einen Algorithmus, der bei anderer Einfüg- als Löschreihenfolge den korrekten index berechnet und du solltest das selber hinkriegen.

Um dir später die selbe Arbeit zu sparen, wäre eine eigene Klasse von QTabWidget abgeleitet eine gute Idee :)

Verfasst: 17. Februar 2010 12:32
von Exasperation
Speicher dir doch einfahc Pointer zu deinen Tabs.
Dann kannst ruhigen Gewissens mit QTabWidget::removeTab() das Tab löschen und mit QTabWidget::insertTab() wieder einfügen.

Wenn du die Tabs nicht komplett ausblenden, sondern nur ausgrauen und nicht mehr anwählbar machen möchtest, kannst du mit QTabWidget::setTabEnabled( int index, bool enable ) die Tabs deaktivieren.

Siehe dazu auch die Doku QTabWidget::setTabEnabled.

/edit: da war einer schneller ^^

Verfasst: 17. Februar 2010 12:44
von Teetrinker
Ah perfekt, klappt! Vielen Dank euch beiden! :D