Splitter

Ähnlich wie QGroupBox ist QSplitter keine echte Layout-Klasse. Durch das Ziehen des Splitters können wir die Größe von Widgets dynamisch verändern. Widgets können wie von Layouts gewohnt mit der Methode addWidget() hinzugefügt werden.

Mit der Methode setCollapsible() können wir festlegen, ob die Größe von Widgets auf 0 reduziert werden kann:

void QSplitter::setCollapsible( int index, bool collapse )

index: Index des Widgets (beginnend bei 0)
collapse: Ist dieser Parameter wahr, kann das Widget auf Größe 0 verkleinert werden.

Nun wollen wir drei vertikal angeordnete QTextEdit-Widgets mit dynamischer Größe (aber > 0) erstellen:

#include <QApplication>
#include <QWidget>
#include <QTextEdit>
#include <QSplitter>
#include <QVBoxLayout>
 
int main( int argc, char *argv[] )
{
  QApplication app( argc, argv );
  QWidget w;
  QTextEdit *textEdit1, *textEdit2, *textEdit3;
  QSplitter *splitter;
  QVBoxLayout *layout;
 
  // Widgets und Layout erzeugen
  textEdit1 = new QTextEdit();
  textEdit2 = new QTextEdit();
  textEdit3 = new QTextEdit();
  splitter = new QSplitter( Qt::Vertical );
  layout = new QVBoxLayout();
 
  // Widgets zum Splitter hinzufügen
  splitter->addWidget( textEdit1 );
  splitter->addWidget( textEdit2 );
  splitter->addWidget( textEdit3 );
 
  // Widgets können nicht auf 0 verkleinert werden
  splitter->setCollapsible( 0, false );
  splitter->setCollapsible( 1, false );
  splitter->setCollapsible( 2, false );
 
  layout->addWidget( splitter );
 
  w.setWindowTitle( "Splitter" );
  w.setLayout( layout );
  w.resize( 500, 500 );
  w.show();
 
  return app.exec();
}

Nun bekommen wir drei QTextEdit-Widgets deren vertikale Größe wir durch Ziehen am Splitter ändern können: