Programmfenster auf Mausklick

GUI-Programmierung mit Qt Designer

01.02.2002
Wenn die Englisch-, C++- und Qt-Kenntnisse ausreichen, macht der Qt Designer grafische Benutzeroberflächen (GUIs) per Mausklick möglich.

Anspruchsvolle Software mit grafischer Benutzeroberfläche erstellt heutzutage fast niemand mehr in Form von Programmen, die in pixelgenauer Kleinarbeit Linie für Linie und Punkt für Punkt "auf den Bildschirm malen". Stattdessen kommen GUI-Bibliotheken zum Einsatz, die in der Art eines Werkzeugkastens vorgefertigte Elemente wie Fenster, Werkzeugleisten, Rollbalken, Knöpfe oder Menüs bereitstellen.

Eine der verbreitetsten (u.a. für KDE eingesetzten) GUI-Bibliotheken heißt Qt und stammt von der norwegischen Firma Trolltech. Ihr großer Vorteil besteht darin, nicht nur für Linux u.a. Unix-Betriebssysteme, sondern auch für Windows und (seit Version 3.0) für MacOS X erhältlich zu sein. Solange der Quellcode keine betriebssystemspezifischen Systemaufrufe enthält, lassen sich Qt-Programme auf allen unterstützten Plattformen ohne Änderung übersetzen.

Außer der Bibliothek selbst bringt das Qt-GUI-Toolkit eine Reihe Hilfsprogramme mit, die das Leben der Programmiererin durchaus erleichtern. Dazu zählt der GUI-Builder Qt Designer. Wie auch andere Programme seiner Art kann er fehlende Kenntnisse in den Programmiersprachen C und C++ zwar nicht kompensieren, aber er sorgt für rasche Erfolgserlebnisse beim Entwerfen grafischer Programmoberflächen. Die mit Qt 3.0.x gelieferten Versionen machen den Einstieg insofern einfacher, als dass sie zusätzlich zum interaktiven Erstellen der Programmfenster automatisch die main()-Routine der Qt-Applikation erzeugen können. So kommt man fast ohne C++-Kenntnisse (aber nicht ohne Qt-Kenntnisse und das Wissen um Klassen und Objekte) zu einem lauffähigen Programm, das allerdings hinter seiner schönen Fassade bestenfalls ein wenig Funktionalität birgt. Der Designer erzeugt XML-Beschreibungen von GUI-Elementen, die mithilfe des "User Interface Compilers" uic in C++-Klassen umgewandelt werden.

So schön die Qt-Welt sein mag – ohne Englischkenntnisse kommt man in ihr nicht weiter. Zwar sind auf Qt basierende Programme vergleichsweise leicht zu lokalisieren, doch geht Trolltech selbst nicht gerade mit gutem Beispiel voran: Weder der Designer oder sonstige mitgelieferte Tools, noch die Dokumentation sind in anderen Sprachen als Englisch erhältlich.

Kasten 1: Lizenzen, Installation und häufige Fehler

Für Open-Source-Projekte ist Qt für X11 als Free-Version unter der GPL oder der (Trolltech-eigenen Open-Source-Lizenz) QPL erhältlich und kann von [1] heruntergeladen werden. Solange die verschiedenen Linux-Distributionen die aktuelle Version 3.0.1 (oder auch nur 3.0) nicht als fertig gepackte rpm-Pakete mitliefern, muss man allerdings selbst kompilieren. Dazu packt man den Qt-3.0.1-Tarball mit

tar -xzvf qt-x11-free-3.0.1.tar.gz

im Installationsverzeichnis (vorzugsweise /usr/local) aus und legt einen Symlink…

ln -s /usr/local/qt-x11-free-3.0.1 /usr/local/qt

… an, mit dem man die Umgebungsvariable QTDIR füttert:

export QTDIR=/usr/local/qt

Anschließend wechselt man mit cd QTDIR ins entsprechende Verzeichnis, tippt ./configure ein, antwortet yes[Return] auf die Frage "Do you accept the terms of either license? " und wartet darauf, dass configure fertig wird. Anschließend leitet make einen sehr langwierigen Kompilierungsvorgang ein. Sollte dieser irgendwann in der Mitte mit einer Fehlermeldung abbrechen, vergewissere man sich, dass noch genügend Plattenplatz zur Verfügung steht. Qt kompiliert auf den meisten Linux-Systemen problemlos; treten dennoch Compilerfehler auf, sind die in der Regel so speziell, dass zu ihrer Beseitigung einige Erfahrung gehört.

Außer der Variablen QTDIR, die besagt, wo die zu benutzende Qt-Version liegt, müssen die Suchpfade für Programme (PATH), Manpages (MANPATH) und Bibliotheken (LD_LIBRARY_PATH) angepasst werden, ehe man Qt und die mitgelieferten Programme ohne Verrenkungen benutzen kann. Dazu tragen Bash-Nutzer/innen die entsprechenden Variablenzuweisungen in die Datei ~/.bash_profile und/oder ~/.bashrc ein:

export QTDIR=/usr/local/qt
export PATH=$QTDIR/bin:$PATH
export MANPATH=$QTDIR/doc/man:$MANPATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

Sollte sich das Programm qmake (siehe Text) weigern, Makefiles zu erstellen, kann man hier noch die Zeile

export QMAKEPATH=$QTDIR/mkspecs/linux-g++

ergänzen. Diese sorgt dafür, dass qmake die nötigen Informationen bekommt, wie Qt-Programme unter Linux mit dem C++-Compiler g++ aus der GCC-Compiler-Suite gebaut werden. Alle export- Kommandos können natürlich auch auf der Kommandozeile aufgerufen werden, um die Einstellungen für die aktuelle Shell zu setzen, die von nachträglichen Änderungen an den Bash-Startdarteien nicht beeinflusst wird.

Wenn die Shell, qmake oder der Compiler nötige Hilfsprogramme, Informationen, Dateien und Klassen nicht finden und mit einer entsprechenden Fehlermeldung aussteigen, liegt das sehr oft an falsch gesetzten Umgebungsvariablen. Beliebt ist etwa die Fehlermeldung, eine bestimmte, mit Q beginnende Klasse fehle. Dann enthält QTDIR meist den Pfad zu einem älteren Qt, etwa Qt 1.44 unter /usr/lib/qt, wo es die entsprechende Klasse tatsächlich nicht gibt.

Die wichtigsten Informationen zum Selbstkompilieren der Qt-Library und der mitgelieferten Hilfsprogramme können Sie in der Datei INSTALL im Sourcen-Verzeichnis nachlesen. Sollten Sie Closed-Source-Software oder Qt-Programme für und/oder unter Windows bzw. MacOS X programmieren wollen, informiert die Trolltech-Homepage [2] über Lizenzen und Kosten. Die englischsprachige Mailingliste qt-interest [3] bietet Unterstützung bei technischen Fragen.

Gestatten: Designer

Wenn die Suchpfade für Programme und Qt selbst stimmen (vgl. Kasten 1), lässt sich der Designer mit dem Befehl designer & aus einem X-Terminal heraus starten. Welche Fenster die Arbeitsfläche anzeigt, legen Sie im Menüpunkt Window / Views fest: Das "File Overview"-Window ermöglicht die Navigation innerhalb aller zu einem Projekt gehörigen Dateien. Object Overview gibt im -Tab einen Überblick darüber, aus welchen Objekten eine im Designer erzeugte GUI-Klasse besteht. Der Reiter Source wiederum enthält grob gesagt ein Abbild der Klassendeklaration. Die wichtige Aufgabe, die Eigenschaften von Widgets festzulegen, übernimmt der Property Editor. Sobald diese Fenster gefüllt sind, lohnt es sich, mit der rechten Maustaste auf einzelne Einträge zu drücken – oft kommt man so zu einem nützlichen Kontextmenü. Das Output Window gibt Aufschluss darüber, was der Designer tut, und kann manchmal bei der Fehlersuche recht nützlich sein.

Zieht man ein Fenster an der Doppellinie auf die leere Fläche, löst es sich aus dem Hauptfenster und lässt sich auf dem aktuellen virtuellen Desktop beliebig verschieben (Abbildung 1). Führt man ein solches herausgelöstes Fenster so an eine Fensterkante des Designers heran, dass der Cursor genau auf dem Rand zu liegen kommt, klinkt es sich wieder ein.

Abbildung 1: Platz schaffen durch Herauslösen von Unterfenstern aus dem Hauptfenster

Sollte der Platz weiterhin knapp werden, können (auf demselben Weg verschiebbare) Werkzeugleisten unter Window / Toolbars abgeschaltet werden. Alle diese Änderungen merkt sich das Programm in der Datei ~/.designerrctb2, die sich auch von Hand modifizieren oder löschen lässt, sofern man es beim Fensterjonglieren zu bunt getrieben hat.

Neue Projekte

Jedes Programmierprojekt beginnt im Designer damit, dass eine neue Projektdatei angelegt wird. Aus dieser einfachen ASCII-Datei (vgl. z.B. [4]) erzeugt qmake ein passendes Makefile, das per Hand zu erstellen recht anspruchsvoll ist. So wählt man zu Projektbeginn File / New... und im darauf erscheinenden Dialog (Abbildung 2) C++ Project.

Abbildung 2: Die Projektdatei wird per Mausklick erzeugt

Ein neuer Dialog namens Project Settings erwartet hinter Project File: den Namen der neuen Projektdatei; der rechts daneben stehende Button mit den drei Punkten führt zu einem File-Auswahl-Dialog. Um die Projektdokumentation nicht gleich zu Anfang zu vernachlässigen, bietet sich ein beschreibender Text im Description-Feld an.

File / New... /Main Window sorgt nun dafür, dass das neue Projekt mit Leben, in diesem Fall dem Hauptfenster der geplanten GUI-Applikation, gefüllt wird. Sofern man das Feld Insert into: im "New File"-Dialog (Abbildung 2 oben) nicht verändert, schlägt der Designer neu zu erzeugende Dialoge, Wizards, C++-Dateien und Hauptfenster dem aktuellen Projekt zu. Jedes über diesen Dialog erzeugte GUI-Fenster wird später zu einer C++-Klasse.

Ein Wizard sorgt nun dafür, dass das Main-Window-Widget sofort mit Actions, Benutzeraktionen wie "Datei speichern", "Anwendung schließen", "Kopiere markierten Text in den Zwischenspeicher" etc., ausgestattet wird. Solche Aktionen kann die Programmiererin als Menüeinträge, Tastaturbelegungen und Werkzeugleisteneinträge verwenden – der Wizard (Abbildung 3) fragt so zunächst nach, ob allgemeingebräuchliche Aktionen im Hauptmenü und/oder in der Toolbar angelegt werden sollen. Kreuzt man an, dass der Designer Slots und Verbindungen ("Connections") für die Aktionen anlegen soll, erstellt er ein Code-Gerüst für die Implementation der entsprechenden Actions und sorgt dafür, dass die Auswahl eines entsprechenden Menüpunkts oder Toolbar-Icons bereits zur Ausführung dieses (meist noch zu schreibenden) Codes führt.

Abbildung 3: Gängige Benutzeraktionen legt der Main-Window-Wizard an

Ein Druck auf den Next>-Button führt zum nächsten Wizard-Dialog. Hier darf man aus den Kategorien, bei denen das Toolbar-Feld in Abbildung 3 angewählt war, die Werkzeugleiste gestalten. Um hier nichts zu übersehen, sollte man das Category-Popdown-Menü komplett durchsehen. Transportiert man den Eintrag <Separator> mit dem Pfeil-nach-rechts-Knopf in die Toolbar-Auswahl, wird an der entsprechenden (durch die Pfeile nach oben und unten veränderbaren) Position ein Trennstrich in Menü oder Toolbar eingefügt. Ein Finish im letzten Wizard-Fenster erlaubt es nun, mit der richtigen Arbeit am Hauptfenster-Widget zu beginnen (Abbildung 4).

Abbildung 4: Ein Hauptfenster ohne Werkzeugleiste

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 

Ähnliche Artikel

  • Grafische Oberflächen mit QT
    Grafische Oberflächen (GUIs) für KDE programmieren: Das klingt anstrengender, als es tatsächlich ist. Mit Qt entwickeln Sie auf einfache Weise einen Bildbetrachter – wir zeigen, wie es geht.
  • Adventskalender mit C++ und Qt
    Es müssen nicht immer Schokoladefigürchen sein: Ein Bilderadventskalender lässt sich auch als GUI-Programm gestalten und eignet sich hervorragend zum Einstieg in die C++-Programmierung.
  • Adventskalender in C++
    Wieder einmal steht die Adventszeit völlig unerwartet vor der Tür. Doch zum Glück zaubern Gideon und ein wenig C++ schnell einen hübschen KDE-Adventskalender für Freunde, Verwandte und Bekannte, während man selbst ein wenig programmieren lernt.
  • FTP-Client KBear
    Wenn's um den Download von Software per FTP geht, bietet ein spezialisiertes Client-Programm viele Vorteile gegenüber dem Zugriff per Web-Browser. KBear kann beispielsweise mehrere Server zeitgleich besuchen.
  • GUI-Programme erstellen mit Glade
    Die Entwicklung auf GTK+ basierender, grafischer Benutzeroberflächen – ein schwieriges, umständliches Unterfangen? Der GUI-Builder Glade widerlegt solche Behauptungen.
Kommentare

Infos zur Publikation

title_2014_09

Digitale Ausgabe: Preis € 5,95
(inkl. 19% MwSt.)

Mit der Zeitschrift LinuxUser sind Sie als Power-User, Shell-Guru oder Administrator im kleinen Unternehmen monatlich auf dem aktuelle Stand in Sachen Linux und Open Source.

Sie sind sich nicht sicher, ob die Themen Ihnen liegen? Im Probeabo erhalten Sie drei Ausgaben zum reduzierten Preis. Einzelhefte, Abonnements sowie digitale Ausgaben erwerben Sie ganz einfach in unserem Online-Shop.

NEU: DIGITALE AUSGABEN FÜR TABLET & SMARTPHONE

HINWEIS ZU PAYPAL: Die Zahlung ist auch ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!       

Tipp der Woche

Schnell Multi-Boot-Medien mit MultiCD erstellen
Schnell Multi-Boot-Medien mit MultiCD erstellen
Tim Schürmann, 24.06.2014 12:40, 0 Kommentare

Wer mehrere nützliche Live-Systeme auf eine DVD brennen möchte, kommt mit den Startmedienerstellern der Distributionen nicht besonders weit: Diese ...

Aktuelle Fragen

Videoüberwachung mit Zoneminder
Heinz Becker, 10.08.2014 17:57, 0 Antworten
Hallo, ich habe den ZONEMINDER erfolgreich installiert. Das Bild erscheint jedoch nicht,...
internes Wlan und USB-Wlan-Srick
Gerhard Blobner, 04.08.2014 15:20, 2 Antworten
Hallo Linux-Forum: ich bin ein neuer Linux-User (ca. 25 Jahre Windows) und bin von WIN 8 auf Mint...
Server antwortet mit falschem Namen
oin notna, 21.07.2014 19:13, 1 Antworten
Hallo liebe Community, Ich habe mit Apache einen Server aufgesetzt. Soweit, so gut. Im Heimnet...
o2 surfstick software für ubuntu?
daniel soltek, 15.07.2014 18:27, 1 Antworten
hallo zusammen, habe mir einen o2 surfstick huawei bestellt und gerade festgestellt, das der nic...
Öhm - wozu Benutzername, wenn man dann hier mit Klarnamen angezeigt wird?
Thomas Kallay, 03.07.2014 20:30, 1 Antworten
Hallo Team von Linux-Community, kleine Zwischenfrage: warum muß man beim Registrieren einen Us...