Login
Newsletter
Werbung

So, 5. März 2006, 00:00

Entwicklung von Applikationen in Qt 4.0

Kompilierung

Es ist die Zeit gekommen, Listings 1, 2 und 3 in ein funktionierendes Programm zu verbinden. Uns fehlt eine .pro-Datei, die unser Projekt beschreibt. .pro-Dateien haben ein einfaches Format, das auf der Zuweisung von Werten für Variablen basiert. Nach dem Lesen der Datei generiert qmake anhand der Werte dieser Variablen ein Makefile. qmake-Variablen sind zu Variablen in sh ähnlich. Man kann sie als einen String oder eine Liste von mit Leerzeichen voneinander separierten Tokens betrachten. Der Operator += fügt Tokens zur Liste hinzu, -= entfernt sie aus einer beliebigen Stelle in der Liste.

Listing 4. employee.pro: Datei, die ein Projekt beschreibt

TEMPLATE = app
TARGET = employee
CONFIG += debug console
HEADERS += employee.h
SOURCES += employee.cpp main.cpp

In der ersten Zeile setzen wir den Wert der Variablen TEMPLATE. Diese Variable legt fest, was infolge der Kompilation entstehen soll. Die häufigsten Werte sind:

  • app: Applikation
  • lib: Bibliothek
  • vcapp, vclib: wie app und lib, jedoch wird von qmake statt einem Makefile eine .dsp-Datei im Microsoft Visual Studio-Format erstellt.

Die nächste Zeile definiert den Namen der Datei, in der das Ergebnis der Kompilierung gespeichert wird. Die Variable CONFIG ermöglicht, verschiedene Projektoptionen zu setzen, wie z.B.:

  • release: Kompilation mit der eingeschalteten Optimierung und ohne Informationen zum Debuggen (debug info)
  • debug: Kompilation mit ausgeschalteter Optimierung und mit Informationen zum Debuggen
  • console: diese Option hat einen Einfluss nur auf die Windows-Plattform. Sie bewirkt, dass die Standardein- und -ausgabe (standard input and output) der Applikation zu der Shell gelangt, in der sie ausgeführt wurde.

Am Ende gibt es eine Liste von Quelldateien.

qmake versteht viele andere Variablen. Es enthält auch Mechanismen, die ermöglichen, Variablen je nach Plattform zu modifizieren, auf der qmake ausgeführt wurde. Man kann also z.B. zu SOURCES Dateien hinzufügen, die nur unter Windows kompiliert werden. Die Syntax einer solchen Anweisung sieht wie folgt aus:

win: SOURCES += windows_functions.cpp

qmake verfügt auch über die Anweisung include, die Variablen aus einer externen Datei einliest.

include(general_options.pri)

Um unser Programm zu kompilieren, müssen wir jetzt die Dateien main.cpp, employee.h, employee.cpp und employee.pro in ein Verzeichnis plazieren und dort qmake und make ausführen. Nach der Ausführung gibt unser Programm folgendes zurück:

emp1: 100
emp2: 100
emp3: 200
emp4: 200

Die Klasse QWidget

QWidget ist die Basisklasse für alle Klassen, die auf dem Bildschirm gezeichnet werden können. Sie besitzt also ein Rechteck (geometry(), setGeometry()), einen Font (font(), setFont()), eine Palette der Standardfarben (palette(), setPalette()) und viele andere Eigenschaften, die ihr Aussehen bestimmen. Sie besitzt auch virtuelle Funktionen, die aufgerufen werden, wenn die Widgetfläche oder ein Teil davon gezeichnet werden soll (paintEvent()), wenn der Benutzer darauf mit der Maus klickt (mousePressEvent(), mouseReleaseEvent()), wenn er mit der Tastatur schreibt (keyPressEvent()), usw.

QWidget erweitert QObject, besitzt also alle dort definierten Mechanismen. Insbesondere hat sie die Möglichkeit der Realisierung einer Baumstruktur. Kinder von Widgets sind normalerweise auch Widgets, die innerhalb des durch das Elternobjekt belegtes Bildschirmbereiches gezeichnet werden.

Hello World!

img 3241 "Das Programm Hello World! in Qt" left o]

Wir fangen mit dem Schreiben der traditionellen Applikation Hello World! an. Dies wird ein Dialog mit einer Schaltfläche sein, die das Programm beendet. Die Quellen dieses Programms befinden sich in Listing 5.

Listing 5. main.cpp: Implementation des Programms Hello World!

#include <QtGui/QApplication>
#include <QtGui/QPushButton>
#include <QtGui/QLabel>
#include <QtGui/QFont>
int main(int argc, char *argv[])
{
 QApplication app(argc, argv);
 QWidget window;
 window.resize(200, 100);
 QLabel label("Hello World!", &window);
 label.setGeometry(0, 0, 200, 50);
 label.setAlignment(Qt::AlignCenter);
 label.setFont(QFont("Arial", 20, QFont::Bold));
 QPushButton button("Close", &window);
 button.setGeometry(10, 60, 180, 30);
 QObject::connect(&button, SIGNAL(clicked()), &window, SLOT(close()));
 window.show();
 return app.exec();
}

Das Programm beginnt mit dem Anlegen eines Objektes vom Typ QApplication. Eine Instanz dieser Klasse ist in allen GUI-Applikationen notwendig. QApplication enthält die Hauptschleife des Programms, die vom Betriebssystem Ereignisse empfängt (Mausbewegungen, Drücken von Tasten auf der Tastatur) und sie dem Widget übergibt, das aktuell vom Benutzer manipuliert wird. Der Konstruktor von QApplication nimmt Parameter argc und argv an, da alle Qt-Applikationen ein paar Standardoptionen kennen. Eine dieser Optionen ist -style Stilname, die den Stil für die Applikation festlegt.

Dann legen wir ein Objekt vom Typ QWidget an und legen dessen Größe fest. Das Widget wurde ohne ein Elternobjekt erstellt, es wird also ein Fenster mit dem Systemrahmen und einer Titelleiste sein.

Kommentare (Insgesamt: 2 || Alle anzeigen )
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung