Das erste Programm erstellen, kompilieren und ausführen

Nun ist es soweit, wir werden unser erstes Qt-Programm erstellen :-)

Vorweg der Code (keine Sorge, Erklärung folgt im Anschluss):

#include <QApplication>
 
int main( int argc, char *argv[] )
{
  QApplication app( argc, argv );
  return app.exec();
}

Kompilieren

Es gibt zwei Wege Qt-Programme zu kompilieren. Egal welcher gewählt wird, es sind immer die gleichen Schritte:

  • Qt erzeugt eine systemunabhängige Projektdatei mit dem Namen des aktuellen Verzeichnisses und der Dateiendung .pro. Darin finden sich alle zum Projekt gehörenden Dateien und Einstellungen zur Verwendung von Qt. Wir können auch noch Befehle an den Compiler weitergeben, z.B. mit dem zusätzlichen „-Wall“-Parameter werden alle Warnungen vom Compiler angezeigt.
  • Mit dem nächsten Befehl wird ein systemabhängiges Makefile erstellt.
  • Schlussendlich wird mit einem Make-Werkzeug das Programm kompiliert. Der genaue Befehl ist abhängig vom verwendeten Tool und Betriebssystem.
  • War der letzte Schritt erfolgreich haben wir nun eine ausführbare Datei.

Kommandozeile

Zuerst legen wir in einem neuen Ordner „first“ eine Datei „main.cpp“ an und fügen den obigen Code ein. Danach öffnen wir die Kommandozeile und wechseln in das Verzeichnis des Codes. Nun führen wir folgende Reihe an Befehlen aus:

qmake -project           # Projektdatei anlegen
qmake                    # Makefile anlegen
make, gmake, etc.        # Kompilieren
./first, first.exe, etc. # Ausführen

Das Programm „qmake“ heißt in seltenen Fällen auch anders, z.B. „qmake-qt4“ unter FreeBSD.
Achtung! Unter Windows wird die ausführbare Datei in einem Unterverzeichnis (Debug bzw. Release, je nach Konfiguration) erstellt. Die Ausführung des Programms kann mit Strg+C abgebrochen werden.
Projekt in der Konsole erstellen und ausführen

Entwicklungsumgebung (Qt-Creator)

Nachdem wir den Qt-Creator geöffnet haben, wählen wir unter „File“ - „New“ - „Empty Qt Project“ aus.
Leeres Qt-Projekt anlegen
Danach wählen wir einen Namen (hier „first“) und einen Pfad für das Projekt. Zusätzlich zum ausgewählten Pfad wird automatisch noch ein Unterordner mit dem Namen des Projekts erstellt.
Namen des Projekts wählen
Als nächstes fragt das Tool, wo die kompilierten Dateien hinkommen sollen. Wir entscheiden uns für „Shadow Building“. Das bedeutet, dass die Objektdateien und die ausführbare Datei in einem eigenen Verzeichnis auf gleicher Ebene zum Projektverzeichnis enden. Dadurch bleibt unser Projektverzeichnis mit dem Quellcode während des Kompilierens unberührt.
Ziel der kompilierten Dateien wählen
Mit einen Klick auf „Finish“ im nächsten Dialogfenster kommen wir zur Editoransicht. Mit einem Rechtsklick auf den Namen des Projekts im „Projects“-Unterfenster links oben öffnet sich das Kontextmenü.
Neue Datei hinzufügen
Dort wählen wir „Add New…“ und danach „C++ Source File“.
.cpp-Datei anlegen
Als Namen wählen wir „main.cpp“, der Pfad sollte mit dem des Projekts übereinstimmen.
Namen der Datei festlegen
Im nächsten Dialog können wir das Projekt wählen dem die Datei hinzugefügt werden soll. Da es unser einziges offenes Projekt ist haben wir hier logischerweise keine weiteren Möglichkeiten. Das Verwenden einer Versionskontrollsoftware wird hier ebenfalls ausgegraut angeboten, damit werden wir uns in einem späteren Kapitel beschäftigen. Mit einem Klick auf „Finish“ wird die Datei dem Projekt hinzugefügt. Hier wird nun der oben genannte Code eingefügt.
Um das Programm zu kompilieren muss zuerst ein Makefile angelegt werden. Dies erreichen wir wieder über das Kontextmenü des Projekts und Auswahl von „Run qmake“. Als nächstes wählen wir im Kontextmenü den Punkt „Build Project [Name]“.
qmake ausführen
Projekt kompilieren
Nun wird das Programm kompiliert. Etwaige Probleme beim Kompilieren können wir durch einen Klick auf „Compile Output“ am unteren Fensterrand des Qt-Creators sehen. Über „Run“ im Kontextmenü können wir das Programm starten. Diese Schritte des Kompilierens und Ausführens können wir auch mit dem Shortcut Strg+R ausführen.
Programm ausführen
Kommandozeilenparameter können im „Projects“-Reiter hinzugefügt werden. Dazu müssen sie in der Detailansicht des Bereich „Run Settings“ in die Zeile „Arguments“ eingetragen werden.
Kommandozeilenparameter festlegen
Mit dem Shortcut Strg+Shift+R bzw. einem Klick auf das rote Viereck in der Leiste über dem Ausgabefenster kann die Ausführung abgebrochen werden.
Programm anhalten

Erklärung des Codes

Wenn ihr das Programm bereits ausgeführt habt, werdet ihr merken, dass es nichts macht, zumindest nichts Offensichtliches. Zur Erklärung: Wir inkludieren die Klasse QApplication. QApplication ist verantwortlich für die Event-Verarbeitung, grafische Darstellung und Steuerung von Qt-Programmen. Sie sollte in jedem Qt-Programm, das ein GUI hat genau 1 mal existieren. Die QApplication-Instanz MUSS vor jedem grafischen Objekt erstellt werden, andernfalls bekommen wir zur Laufzeit eine Fehlermeldung („QWidget: Must construct a QApplication before a QPaintDevice“). Für GUI-lose Programme sollte die Basisklasse QCoreApplication verwendet werden. Jede Qt-Klasse befindet sich in einer Datei mit dem gleichen Namen.

#include <QApplication>

Als nächstes legen wir eine Instanz der Klasse an und übergeben die Kommandozeilenparameter. Damit können verschiedene Einstellungen vorgenommen werden, mit denen wir uns aber nicht weiter beschäftigen wollen.

QApplication app( argc, argv );

Mit der Methode exec() startet die Event-Schleife, die Ereignisse, die das Programm betreffen behandelt. Dessen Rückgabewert verwenden wir auch als Rückgabewert für unser Programm.

return app.exec();

Soweit zu unserem ersten Programm mit Qt. Keine Angst, schon bald werden wir größere und grafisch ansprechendere Programme erstellen können ;-)
Hier ein kleiner Vorgeschmack für jene unter euch, die es noch nicht erwarten können:

#include <QApplication>
#include <QLabel>
 
int main( int argc, char *argv[] )
{
  QApplication app( argc, argv );
  QLabel label( "<h1>Hallo Welt!</h1>" );
  label.show();
  return app.exec();
}

Führt man den obigen Code aus, erhält man folgendes Fenster:

Das Programm beendet sich automatisch nachdem das Fenster geschlossen wurde. Eine genaue Erklärung des Codes folgt in den nächsten Kapiteln.