next_inactive up previous


Praktikum IKT 3. Semester





Dr. Andreas Müller, TU Chemnitz, Fakultät für Informatik





Inhalt

Einführung in QT

Die QT-Bibliothek

Informationen:

Einführendes Beispiel

// Beispielprogramm aus Kapitel 2.2, Das erste Qt-Programm
// aus Lehner,B.: KDE- und QT-Programmierung
#include <qapplication.h>
#include <qlabel.h>

//spezielle Headerdateien f�r QT-Klassen

int main (int argc, char **argv)
{
   QApplication app (argc, argv);
   //Initialisierungen und Auswertung Kommandozeilenparameter 
   QLabel *l = new QLabel ("<H1>Hallo, Welt</H1>", 0);
   // l = Pointer auf Objekt der Klasse QLabel
   // 1. Parameter Text in RichTextFormat (Untermenge von HTML)
   // 2. Parameter NULL-Zeiger: In welches Fenster soll das erzeugte
   // integriert werden. Hier: eigenst�ndiges Fenster -> NULL
   l->show();
   // zeige Fenster

   app.setMainWidget (l);
   // Hauptfenster der Applikation
   return app.exec();
   // Endlosschleife zum Anzeigen des Hauptfensters
}
Die Programm muß unter Unix/Linux wie folgt übersetzt werden:
g++ -o hello-qt -I$QTDIR/include -lqt hello-qt-cpp
Das Ergebnis sollte wie folgt aussehehen:
=5cm \epsffile{hello-qt.ps}

Das Signal-Slot-Konzept

Elemente einer grafischen Benutzeroberfläche (z.B. Buttons) müssen ihrer Umgebung mitteilen, dass eine Aktion des Nutzers stattgefunden hat. Dies geschieht meisst durch sogenannte Callback-Funktionen. Dabei trägr man im Objekt eine Funktion ein, die bei einer Aktion aufgerufen werden soll.

Die Firma Troll Tech hat in ihrer GUI-Bibliothek QT das Callback-Prnzip erweitert und das sehr mächtige Signal-Slot-Konzept entwickelt, das in der Klasse QObject angewandt wird. In jeder von QObject abgeleteten Klasse kann man neue Methoden als Signal oder Slot definieren. Signale übernehmen die Aufgabe, Nachrichten aus einem Objekt zu versenden, Slots dazu, Nachrichten zu empfangen. Mit der Methode connect kann man zur Laufzeit ein Signal mit einem Slot verbinden.
Beispiel

// Kapitel 3.1.2: Das Signal-Slot-Konzept
// aus Lehner,B.: KDE- und QT-Programmierung
// Beispiel 2: Verbindung zwischen QPushButton und QLabel
#include <qapplication.h>
#include <qlabel.h>
#include <qpushbutton.h>

int main (int argc, char **argv)
{
   QApplication app (argc, argv);
   QLabel *l = new QLabel ("<H1>Hallo, Welt</H1>", 0);
   l->show();

   QPushButton *b = new QPushButton ("L�schen", 0);
   b->show();

   QObject::connect (b, SIGNAL (clicked()),
                     l, SLOT (clear()));

   // b (QPushButton) kann Signal (hier clicked) senden
   // l (QLabel) kann Signal mit "Slot" empfangen
   // Verbindung wird mit connect hergestellt werden.
   app.setMainWidget (l);
   return app.exec();
}
Das Ergebnis sieht wie folgt aus:
=5cm \epsffile{sig-left.ps} \epsffile{sig-right.ps}

Der QT Designer

Da der das Erstellen von Dialogen auf die herkömmliche Art und Weise doch etwas umfangreich wird (siehe Anhang A: Einführung in $GTK_{MM}$) stellen viele GUI-Bibliotheken ein Werkzeug zum Entwurf von Dialogen bereit. Für QT ist dies der Designer, der in der Regel bei der Installation von QT mit installiert wird(Aufruf: designer). Das folgende Bild zeigt die Arbeit mit dem Designer beim Entwurf einer grafischen Nutzeroberfläche zur Berechnung von Lösungen des Oldenburger Milchkannenproblems (siehe Script Teil 1, Abschnitt 3.2).
=16cm \epsffile{designer.ps}

Eine Anleitung zur Bedienung des Designers kann direkt vom Designer aus genutzt werden, die Files, die durch die Nutzung des Designers beim Entwurf einer Lösung zum Oldenburger Milchkannenproblem entstanden sind, sind unter http://www.informatik.tu-chemnitz.de/Grundl-Inf/Aufgaben/beispiele/olmikaqt.tgz downloadbar.

Über dieses Dokument ...

This document was generated using the LaTeX2HTML translator Version 2002-2-1 (1.70)

Copyright © 1993, 1994, 1995, 1996, Nikos Drakos, Computer Based Learning Unit, University of Leeds.
Copyright © 1997, 1998, 1999, Ross Moore, Mathematics Department, Macquarie University, Sydney.

The command line arguments were:
latex2html -split 0 qt-einf.tex

The translation was initiated by Dr.Andreas Mueller on 2006-11-07


next_inactive up previous
Dr.Andreas Mueller 2006-11-07