Einzelne Tabs von tabWidget verstecken

Alles rund um die Programmierung mit Qt
Antworten
Teetrinker
Beiträge: 37
Registriert: 21. Mai 2008 21:07

Einzelne Tabs von tabWidget verstecken

Beitrag 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
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: Einzelne Tabs von tabWidget verstecken

Beitrag 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 :)
Exasperation
Beiträge: 186
Registriert: 11. März 2009 18:00
Wohnort: VS

Beitrag 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 ^^
Teetrinker
Beiträge: 37
Registriert: 21. Mai 2008 21:07

Beitrag von Teetrinker »

Ah perfekt, klappt! Vielen Dank euch beiden! :D
Antworten