Programmentwicklung mit Qt auf Windows 7

Nokias Qt Framework deckt sämtliche Bereiche moderner Desktop- und Systemprogrammierung ab. Es ist eine quelloffene Alternative zu Microsofts Foundation Classes, die sich besonders dann empfiehlt, wenn Portabilität auf Linux oder Mac OS X gewünscht ist. Das dreiteilige Tutorial gibt eine Einführung und wird auch auf die Parallelprogrammierung eingehen.

In Pocket speichern vorlesen Druckansicht 29 Kommentare lesen
Lesezeit: 18 Min.
Von
  • Matthias Nagorni
Inhaltsverzeichnis

Nokias Qt Framework deckt sämtliche Bereiche moderner Desktop- und Systemprogrammierung ab. Es ist eine quelloffene Alternative zu Microsofts Foundation Classes, die sich besonders dann empfiehlt, wenn Portabilität auf Linux oder Mac OS X gewünscht ist. Das dreiteilige Tutorial gibt eine Einführung und wird auch auf die Parallelprogrammierung eingehen.

Dank seiner Konzepte und des großen Funktionsumfangs eignet sich Qt sowohl für den Gelegenheitsprogrammierer, der seine Anwendung mal eben schnell mit einer kleinen grafischen Oberfläche versehen möchte, als auch für den Entwickler anspruchsvoller kommerzieller Applikationen. Der kommerzielle Einsatz von Qt ist inzwischen kostenfrei möglich, da das Framework seit der im März 2009 veröffentlichten Version 4.5 unter der LGPL 2.1 erhältlich ist.

Mehr Infos

Plattformunabhängige Parallelprogrammierung mit C++ und Qt

In dieser Reihe bisher erschienen:

Die Klassenbibliotheken von Qt bieten portable Abstraktionen für nahezu alle Bereiche moderner C++-Programmierung, von SQL, XML und Netzwerkprogrammierung bis hin zu OpenGL. Seit mehr als zehn Jahren finden sich zudem Klassen für die Parallelprogrammierung im Funktionsumfang, wobei der betreffende Teil 2008 mit Qt 4.4 deutlich erweitert wurde und inzwischen sogar MapReduce implementiert.

Neben den Bibliotheken enthält das Qt SDK die Entwicklungsumgebung Qt Creator und eine Reihe weiterer Werkzeuge. Unter Windows liefert es MinGW, die minimalistische Version der GNU-Compiler-Werkzeuge, mit. Wer lieber Microsofts IDE Visual Studio verwendet, kann das mit Qt ebenfalls tun. Auf Windows Vista und Windows 7 ist das sogar die einzige offiziell unterstützte Variante. Für das Tutorial genügen zunächst Qt Creator und MinGW. Im Folgenden sei am Beispiel einer einfachen Bildbetrachter-Applikation eine kurze Einführung in die Programmierung mit Qt gegeben. Anschließend wird gezeigt, wie man das Programm mit einem Icon verzieren und einen Installer dafür bauen kann.

Mehr Infos

Quellcode zum Artikel

  • QHelloWorld (.zip, 8 KByte)
  • QSimpleViewer (.zip, 23 KByte)

[Update] Die Beispiele wurden gegenüber der ursprünglichen Version noch ein mal leicht überarbeitet. In main.cpp werden QApplication und QMainWindow nicht mehr dynamisch erzeugt, wodurch ihr Destruktor bei Programmende automatisch aufgerufen wird. [/Update]

Im ersten Schritt ist dazu das aktuelle Qt SDK zu installieren. Der Online-Installer ist praktisch, weil sich mit ihm nur die Komponenten herunterladen lassen, die man wirklich installieren möchte. Dazu wählt man im Installer die Option Custom und kann anschließend nicht benötigte Komponenten wie die Symbian-Unterstützung und die Simulatoren deselektieren. Unter Linux ist es empfehlenswert, auf die Qt-Pakete der jeweiligen Linux-Distribution zurückzugreifen.

Zunächst ist mit einem "Hello World"-Programm, das einen einfachen Bildbetrachter in nur 30 Zeilen implementiert, die Umgebung zu testen. Dazu muss der Leser ein Verzeichnis QHelloWorld anlegen und die Dateien main.cpp und QHelloWorld.pro sowie QHelloWorld.rc und QHelloWorld.ico dorthin kopieren. Die Dateien finden Sie hier zum Download.

QHelloWorld, ein einfacher Bildbetrachter in 30 Zeilen Qt-Code (Abb. 1)

Lädt man die Projektdatei QHelloWorld.pro in Qt Creator, öffnet sich ein Dialog mit Einstellungen für das Projekt. Hier übernimmt man das standardmäßig ausgewählte Ziel Desktop. Unter Details lässt sich definieren, ob Pfade sowohl für die Debug- als auch für die Release-Versionen anzulegen sind. Falls mehrere Versionen eines Programms unabhängig voneinander entwickelt werden sollen, empfiehlt es sich, die Option Shadow Build zu deaktivieren. Ein Klick auf den grünen Play-Button im Hauptfenster des Qt Creator oder STRG + R startet zunächst das Kompilieren und bei Erfolg das Beispielprogramm. Dieses erfragt per Filebrowser den Namen einer Bilddatei und stellt das Bild im Maßstab 1:1 dar.

Hier ein Blick auf den Quellcode der main.cpp:

#include <QtGui/QApplication>
#include <QtGui/QMainWindow>
#include <QtGui/QMenu>
#include <QtGui/QMenuBar>
#include <QtGui/QScrollArea>
#include <QtGui/QLabel>
#include <QtGui/QImage>
#include <QtGui/QPixmap>
#include <QtGui/QFileDialog>

int main(int argc, char *argv[])
{
QApplication *myApp = new QApplication(argc, argv);
QMainWindow *top = new QMainWindow();
top->setWindowTitle("QHelloWorld (c)2011 by Matthias Nagorni");
QScrollArea *scroll = new QScrollArea;
QLabel *label = new QLabel;
scroll->setWidget(label);
QMenu *fileMenu = top->menuBar()->addMenu("&Datei");
fileMenu->addAction("&Beenden", myApp, SLOT(quit()));
top->setCentralWidget(scroll);
top->setGeometry(100, 100, 800, 600);
top->show();
QImage image;
if (argc > 1) image = QImage(argv[1]);
else image = QImage(QFileDialog::getOpenFileName());
label->setPixmap(QPixmap::fromImage(image));
label->setMinimumSize(image.width(), image.height());
return myApp->exec();
}

Das QApplication-Objekt übernimmt die Verwaltung der Applikation und enthält insbesondere die Event-Loop. Diese wird in der vorletzten Zeile mit myApp->exec() gestartet. Für das Hauptfenster der Anwendung erzeugt das Programm ein QMainWindow-Objekt und legt mit der Funktion setCentralWidget das Fenster für die Programmoberfläche unterhalb der Menüleiste fest. Im Beispiel ist dies ein mit Scroll-Leisten verziertes QLabel-Objekt. Solche Objekte kommen meist bei der Darstellung von Text zum Einsatz, sie können aber auch als Container für Bilder dienen. In der Menüleiste erzeugt der Aufruf von top->menuBar()->addMenu("&Datei") den Menüpunkt "Datei". Die Funktion addAction fügt einen Menüpunkt zum Beenden des Programms hinzu.

Über die Klasse QImage implementiert das Programm umfangreiche Funktionen zum Laden, Speichern und Manipulieren von Bildern in fast allen verbreiteten Formaten. Im Beispiel lässt sich der Name der Bilddatei entweder als Kommandozeilenparameter übergeben oder in einem File-Dialog auswählen, wobei die Dateiendung das Bildformat bestimmt. Die benötigten Bibliotheken bindet Qt automatisch ein. Unter Windows muss der Entwickler allerdings sicherstellen, dass das Programm die betreffenden .dll-Dateien findet – dazu später mehr.

Das Hauptfenster der Qt Creator IDE mit dem Quellcode von QHelloWorld (Abb. 2)