C und C++ boten keine Möglichkeit zur Realisierung grafischer Benutzerschnittstellen. Eine der ersten – und für die Geschichte des Frameworks bedeutendsten – Handlungen der Entwicklerschaft bestand in der Erstellung eines GUI-Stacks.
Aufgrund der plattformunabhängigen Ausrichtung von Qt legte man bei der Entwicklung Wert darauf, dass sich die Steuerelemente automatisch an geänderte Begebenheiten anpassen. Dies führte zur Entwicklung einer hochleistungsfähigen Layout-Engine, die auch komplexeste Layouts automatisch „mitskaliert“ und so konsistentes Aussehen auf den meisten Systemen garantiert.
Das anfangs als QtGUI bezeichnete Modul wurde nach dem Erscheinen des im nächsten Heft besprochenen QML-Systems in Widgets umbenannt. Diese „Erbschaft“ wirkt sich bis heute in den als Projektdeskriptor dienenden .pro-Dateien aus, die das betreffende Modul nach folgendem Schema einbinden:
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
Unterschiedliche Auflösungen und Bildschirmgrößen waren spätestens seit Windows 95 Standard. Im Laufe der letzten Jahre hat sich die „Bandbreite“ erhöht: Sowohl im Bereich der dpi als auch bei der rohen physikalischen Auflösung ist der Wertebereich wesentlich angestiegen.
Auf Änderungen der Fenstergröße reagierende Entwickler arbeiteten bisher oft mit Routinen, die die Struktur des Formulars analysierten und die Größe der Steuerelemente danach nach mehr oder weniger rigiden Regeln aktualisierten. Qt kehrt diese Beziehung insofern um, als die Intelligenz hier in den Widgets und ihren Layouts liegt.
Wir wollen uns diese eher abstrakte Situation anhand des in der Skizze gezeigten Texteditors verdeutlichen. Er besteht aus einem Eingabefeld und drei darunterliegenden Buttons. Die Knöpfe sollen nach dem Schema 1-2 angeordnet sein: In der ersten Reihe befindet sich ein Knopf, die darunterliegenden Buttons liegen nebeneinander (Abb. 1).
Neu erstellte Projekte enthalten eine Datei namens mainwindow.ui. Klicken Sie diese an, um Qt Creator in den WYSIWYG-Bearbeitungsmodus zu versetzen. Dieser verhält sich – im Großen und Ganzen – wie der von Visual Studio bekannte GUI-Editor: Die Toolbar auf der linken Seite enthält Widgets, die auf das in der Mitte dargestellte Formular abgelegt werden. Die Eigenschaften des gerade ausgewählten Elements erscheinen im Kasten unten rechts.
Formulare müssen die in ihnen enthaltenen Steuerelemente auf eine bestimmte Art anordnen. Dies erfolgt über das so genannte Formularlayout, das nach dem Markieren des Formularinhalts durch die auf der Oberseite des WYSIWYG-Editors befindliche Toolbar zugewiesen werden kann (Abb. 2). Wir werden unsere Widgets in einem Vertical Layout unterbringen, das seine Kinder wie in einem Stapelspeicher übereinander anordnet.
Fehlende Formularlayouts sind ein klassischer Anfängerfehler: Sie führen zu einer kompletten Deaktivierung des Layoutsystems. Wenn ein Formular nicht zufriedenstellend auf Größenänderungen reagiert, so prüfen Sie das Aussehen in der Outline (Abb. 3).
Die in Abbildung 3 gezeigte Baumansicht eignet sich zur Selektion von Steuerelementen. Das Anklicken eines Widgets sorgt dafür, dass seine Eigenschaften in der darunter angezeigten Properties-Box erscheinen. Neue Steuerelemente können per Drag and Drop in den Steuerelementbaum gelegt werden – bei komplexen Layouts ist dies ein einfacher Weg zur Durchführung kleinerer Änderungen.
Da wir im Moment noch keine Steuerelemente im Formular haben, ziehen wir ein Horizontal Layout aus der Toolbar in das Formular. Platzieren Sie danach zwei Push-Buttons im roten Rahmen. Die beiden Widgets werden automatisch nebeneinander angeordnet. Vor dem Hinzufügen des Formularlayouts müssen Sie noch einen weiteren Push-Button und ein Steuerelement vom Typ Plain Text Edit einpflegen. Platzieren Sie diese übereinander, um Qt Creator das eigentliche Anordnen der Widgets zu erleichtern.
Der Lohn unserer Mühen ist in den Abbildungen 4 und 5 gezeigt – es ist schon jetzt offensichtlich, dass Qt das Aussehen der Widgets nach einer Änderung der Bildschirmausrichtung automatisch an die neue Situation anpasst.
Die Textbox ist sowohl im Editor als auch am Telefon bildschirmfüllend, während die Buttons mit weniger Platz auskommen. Das Verhalten der Steuerelemente lässt sich an mehreren Stellen an Ihre Bedürfnisse anpassen.
Widgets werden im Allgemeinen von der Masterklasse QWidget abgeleitet. Dort werden drei wichtige Eigenschaften eingesetzt: minimumSize und maximumSize versorgen die Rendering Engine mit Informationen über den minimalen und den maximal verwendbaren Platz. Die beiden Werte müssen nicht unbedingt...