Stapellayout

Die Klasse QStackedLayout ermöglicht das Erstellen von Stapellayouts. Mittels Stapellayouts können wir recht einfach zwischen Ansichten wechseln. Die Widgets werden nacheinander in das Stapellayout eingefügt und durch einen Slot mit einem Auswahlwidget (z.B. QComboBox) verbunden. Je nach Auswahl wird ein bestimmtes Widget des Stacks angezeigt. Man kann sich das ganze wie ein Buch vorstellen. Blättert man um, kommt man zu einer neuen Ansicht. Die alte ist zwar nicht verschwunden, aber momentan nicht sichtbar.

Im folgenden Beispiel bietet uns eine Combobox die Möglichkeit zwischen einem Button, einem Texteingabefeld, einer Checkbox und einer Datumsanzeige zu wechseln:

#include <QApplication>
#include <QPushButton>
#include <QTextEdit>
#include <QCheckBox>
#include <QTimeEdit>
#include <QComboBox>
#include <QStackedLayout>
#include <QVBoxLayout>
 
int main( int argc, char *argv[] )
{
  QApplication app( argc, argv );
  // Unser Hauptwidget, auf dem alle anderen angezeigt werden
  QWidget w;
  // Dient zur Auswahl der Widgets
  QComboBox *comboBox;
  // Widgets, die auf das Stapellayout gelegt werden
  QTextEdit *textEdit;
  QCheckBox *checkBox;
  QTimeEdit *timeEdit;
  // Vertikales Layout um die Combobox und das Stapellayout auf dem
  // Hauptwidget zu platzieren
  QVBoxLayout *vLayout;
  // Stapellayout, das alle Widgets enthält, jedoch nur eines anzeigt
  QStackedLayout *stackedLayout;
 
  // Widgets und Layouts anlegen
  stackedLayout = new QStackedLayout();
  vLayout = new QVBoxLayout();
  timeEdit = new QTimeEdit();
  checkBox = new QCheckBox( "CheckBox" );
  textEdit = new QTextEdit();
  comboBox = new QComboBox();
 
  // Wird in der Combobox die Auswahl verändert,
  // zeigt das Stapellayout das entsprechende Widget an
  QObject::connect( comboBox, static_cast<void (QComboBox::*)(int)>( &QComboBox::activated ),
                    stackedLayout, &QStackedLayout::setCurrentIndex );
 
  // Widgets zum Stapellayout hinzufügen
  stackedLayout->addWidget( textEdit );
  stackedLayout->addWidget( checkBox );
  stackedLayout->addWidget( timeEdit );
 
  // Auswahlmöglichkeiten zur Combobox hinzufügen
  comboBox->addItem( "TextEdit" );
  comboBox->addItem( "CheckBox" );
  comboBox->addItem( "TimeEdit" );
 
  // Combobox und Stapellayout in ein Layout packen und auf
  // das Hauptwidget anwenden
  vLayout->addWidget( comboBox );
  vLayout->addLayout( stackedLayout );
  w.setLayout( vLayout );
 
  w.setWindowTitle( "Stapellayout" );
  // Passende Größe für das Widget setzen und Widget anzeigen
  w.resize( 200, 140 );
  w.show();
 
  return app.exec();
}

Je nach der Auswahl in der Combobox, wird ein anderes Widget angezeigt: