====== Widget-Gruppen ====== Die Klasse ''QGroupBox'' ist zwar keine echte Layout-Klasse, sollte aber trotzdem in diesem Zusammenhang erwähnt werden. Wie der Name schon sagt, können damit Widgets zu einer Gruppe zusammengefasst werden, indem man sie in ein Layout packt und dieses auf die ''QGroupBox''-Instanz anwendet. Je nach grafischer Oberfläche erhält die Gruppe einen Rahmen, optional einen Titel und ebenfalls optional ein ''QCheckBox''-ähnliches Widget zum aktivieren bzw. deaktivieren des Inhalts. Dadurch können z.B. nicht verfügbare Einstellungen in einem Dialog ausgegraut werden. Zur Aktivierung dieser Eigenschaft ist nur ein Aufruf der Methode ''setCheckable()'' nötig. Ob die Box aktivierbar ist, kann mit ''isCheckable()'' abgefragt werden. Der Zustand kann analog zu ''QCheckBox'' mit ''setChecked()'', ''isChecked()'' und ''toggled()'' verwaltet werden. Nun wollen wir einen Verbindungsdialog mit optionaler Eingabe eines Benutzernamens und eines Passworts erstellen. Wir werden uns an dieser Stelle nur auf die grafischen Komponenten konzentrieren (zumindest vorerst ;-)) und statt der Verbindungsherstellung das Programm einfach beenden. #include #include #include #include #include int main( int argc, char *argv[] ) { QApplication app( argc, argv ); QWidget w; QPushButton *connectButton; QLineEdit *addressLineEdit, *usernameLineEdit, *pwLineEdit; QGroupBox *authBox; QVBoxLayout *layout, *authLayout; // Widgets und Layouts anlegen connectButton = new QPushButton( "Verbinden" ); addressLineEdit = new QLineEdit(); usernameLineEdit = new QLineEdit(); pwLineEdit = new QLineEdit(); authBox = new QGroupBox( "Authentifizierung erforderlich" ); layout = new QVBoxLayout(); authLayout = new QVBoxLayout(); // Anstatt eine Verbindung herzustellen beendet unser Button das Programm QObject::connect( connectButton, &QPushButton::clicked, &app, &QApplication::quit ); // Passwort beim Tippen nicht anzeigen pwLineEdit->setEchoMode( QLineEdit::Password ); // Widget-Gruppe kann aktiviert werden authBox->setCheckable( true ); authBox->setChecked( false ); // Widgets in den Layouts platzieren authLayout->addWidget( usernameLineEdit ); authLayout->addWidget( pwLineEdit ); authBox->setLayout( authLayout ); layout->addWidget( addressLineEdit ); layout->addWidget( authBox ); layout->addWidget( connectButton ); w.setWindowTitle( "Verbinden" ); w.setLayout( layout ); w.show(); return app.exec(); } Und so sieht das Programm nach aktivierter Authentifizierung und Eingabe aus: \\ {{:frameworks:qt:gui:basic:layouts:groupbox.png|}}