Programmfenster auf Mausklick
GUI-Programmierung mit Qt Designer
Eigenschaften und mehr
Zwei neue Fenster sind hinzugekommen: ein Formular, auf dem GUI-Elemente aus den Werkzeugleisten platziert werden, und der Action Editor. Je nachdem, welches Widget auf dem Formular markiert ist, ändert sich der Inhalt des Properties-Reiters.
Properties sind Eigenschaften einer Klasse, die sich mit set-Funktionen ändern lassen. Die Funktionstaste [F1] liefert eine Kurzbeschreibung. Ein Klick auf die Hyperlinks ruft das externe Hilfsprogramm assistant mit dem entsprechenden Ausschnitt der API-Dokumentation auf. Beim "Container-Fenster", per Default als Form x bezeichnet, wird die Property name zum Klassennamen der gesamten Klasse; sonst legt man damit den Variablennamen des jeweiligen Objekts fest.
Betätigt man über einem markierten Formularbestandteil die [F1]-Taste, erscheint ebenfalls der Qt Assistant mit der passenden API-Dokumentation. Dessen Start kann auf etwas leistungsschwächeren Rechner einige Zeit dauern. Leider geschieht einfach nur nichts, wenn der Designer das assistant-Programm mangels passend gesetzter Pfadangabe o.a. nicht aufrufen kann.
Möchte ein Qt-GUI-Objekt signalisieren, dass jetzt etwas passieren soll, sendet es ein Signal aus. So setzt ein Pushbutton-Objekt das Signal clicked() in die Welt, sobald der Nutzer auf dieses GUI-Element klickt. Nun muss sich nur noch ein entsprechendes Objekt finden, das dieses Signal bearbeiten will, sonst verhallt es unerhört. Eine Klasse, deren Objekte auf bestimmte Signale reagieren sollen, enthält daher Funktionen (Slots), die mit den entsprechenden Signalen verbunden ("connected") werden. Wie das genau aussieht, ist in [4] oder auch im Qt-Tutorial [5] genauer erklärt.
Mit dem Connection-Werkzeug, in der Werkzeugleiste über das Icon mit dem rot-blauen Balken aufzurufen, lassen sich zwei Widgets auf dem Formular "verbinden". Der aufploppende Dialog (Abbildung 5) gibt die Möglichkeit, ein Signal des zuerst markierten Objekts mit einem Slot zu verknüpfen. Das etwas irreführend mit Slots bezeichnete Dropdown-Menü ermöglicht die Auswahl des Zielobjekts. Dessen Slots können nun markiert werden.
Unter Edit / Slots erhält man die Möglichkeit, Slots für die auf dem Formular entstehende GUI-Klasse zu definieren. Wer in C++ sicher ist, kann diese neuen Funktionen gleich mit dem beispielsweise über das Kontextmenü des Formulars unter Source... zu erreichenden Code-Editor implementieren. Leider lässt sich der nicht aus dem Hauptfenster lösen, sodass die Arbeit mit ihm etwas beschwerlich ist. Fügt man hier eine neue Funktion von Hand ein, wird diese als neuer Slot auch in den Source-Reiter eingetragen (Abbildung 6). Dort trägt man über das Kontextmenü übrigens auch Header-Dateien nach, die für die Implementation gebraucht werden. Während die GUI-Beschreibung der neuen Klasse beim Speichern (etwa mit File / Save All) in einer XML-Datei mit der Endung .ui landet, wird die Implementation in einem entsprechenden .ui.h-File abgelegt.
Layout-Management
Wenn schon die grafischen Elemente des neuen GUIs per Mausklick platzierbar sind, sollte sich der Designer auch ohne händische Friemelei um das harmonische Gesamtbild kümmern. Dafür ist die Layout-Management-Toolbar (Abbildung 7) zuständig. Wie bei allen anderen Icons auch erschließt sich deren Bedeutung über die Tool-Tipps, gelbe "Zettelchen", die erscheinen, wenn die Maus ein wenig über dem Icon verweilt. Ins Formular eingefügte Federn sorgen für ausgewogenen Platz zwischen markierten Elementen, wenn man sie mit den entsprechenden Werkzeugen in ein Gitter bzw. ein horizonales oder vertikales "Layoutraster" einpasst. Bei Splitter-Layouts kann der Anwender des fertigen GUIs den Platz, den die betroffenen Widgets einnehmen, nach Gutdünken zwischen ihnen aufteilen.
Das Ergebnis der Bemühungen lässt sich über das Preview-Menü in verschiedenen Outfits von Windows bis Motif betrachten. Einzelelemente innerhalb eines layouteten "Containers" können sich übrigens nur dann in ihrer Größe verändern, wenn das Layout vorher aufgehoben (Break Layout) wurde.



