Qt für C++-Anfänger: Qwt nutzen

Aus Wikibooks
Screenshot der IDE  Qt-Creator mit einem Programm, das eine Sinuskurve mit Hilfe von Qwt darstellt

Qwt ist eine wunderbare grafische Erweiterung von Qt durch weitere Klassen. Damit lassen sich zum Beispiel sehr einfach Kurven mit 2D-Plots erstellen. Dieses Lehrbuch soll eine kleine, kurze und einfache Einführung in die Verwendung der Qt Erweiterung Qwt sein. Normalerweise wird in Programmierbüchern immer mit einem Hello World Programm gestartet, um sicher zu stellen, dass die Programmierumgebung auch installiert ist. Als Einführungsbeispiel ist hier aber eine Sinusfunktion grafisch dargestellt, denn die Hello World Programme haben Sie bestimmt schon in C++ und Qt Lehrbüchern kennen gelernt.

Um das Beispiel selbst erstellen zu können, benötigt man eine IDE für die Programmiersprache C++ (z.B.  Qt-Creator) und muss natürlich Qt installiert haben. Von der Webseite http://qwt.sourceforge.net/index.html müssen Sie sich dann noch die entsprechende Installation für Windows, MAC oder Linux herunter laden. Meist bieten die Linux-Distributionen fertige Pakete zum Downloaden, so dass sich alles fast automatisch in den Qt-Creator einfügt. Wichtig ist, dass Sie sich die Pfade zu den Header-Dateien und den Bibliotheken merken und diese in die *.pro-Datei des Projekts übernehmen. Die Einträge sehen unter opensuse11.4 in der ...pro-Datei zum Beispiel so aus:

INCLUDEPATH += /usr/include/qwt
LIBS += -L/usr/lib/ -lqwt

Um es nicht zu kompliziert zu machen, ist der komplette Code in eine einzige main.cpp-Datei geschrieben:

#include <qwt_plot_curve.h>
#include <qwt_plot.h>
#include <qapplication.h>

int main(int argc, char **argv)
{
    QApplication a(argc, argv);
    double x[101];
    double y[101];

    for ( int i = 0; i < 101; i++ ) {
        x[i] =  i / 10.0;
        y[i] = sin(x[i]);
    }

    QwtPlot plot;
    QwtPlotCurve *curve = new QwtPlotCurve();
    curve->setRawSamples(x, y, 101);
    curve->attach(&plot);
    plot.show();
    return a.exec();
}

Der Code ist fast selbsterklärend. Die ersten beiden #includes binden zwei qwt-Header-Dateien ein, die zur Darstellung einer 2-dimensionalen Kurve gebraucht werden. Die dritte #include-Zeile brauchen wir für Qt. Die Kurvenpunkte werden über x,y Wertepaare definiert. Davon gibt es hier 101 Stück die über eine for-Schleife als eindimensionale Arrays definiert werden. Dann wird ein Objekt mit dem Namen "plot" von der Klasse QwtPlot erzeugt. Als Nächstes wird der Objekt-Zeiger (oder Pointer) "*curve" auf die Klasse QwtPlotCurve gelegt. Die Methode "setRawSamples" des Objekts "curve" der Klasse "QwtPlotCurve" übergibt die x,y Wertepaare und die Anzahl der Wertepaare. Mit der Methode "attach" wird die Verbindung zu dem Objekt "plot" der Klasse "QwtPlot" hergestellt. Zum Schluss muss das Objekt "plot" mit der Methode "show" nur noch gezeigt werden und mit der Methode "exec" der Qt-Klasse "QApplication" wird die Darstellung gestartet.

In dem Beispiel der Einleitung wird am Anfang ein Objekt "a" der Klasse QApplication erzeugt. QApplication ist eine übergeordnete Klasse, die in fast allen Qt-Programmen zu finden ist und den Zugriff auf die grafischen Benutzerschnittstellen (GUI, Graphical User Interface) von Qt regelt. Der Konstruktor von QApplication benötigt immer argc und argv. Das sind die Parameter, die in jedem C++-Programm beim Start des Programms der "main"-Funktion übergeben werden. In vielen GUI-Programmen werden diese Parameter aber gar nicht benötigt; da aber der Konstruktor von QApplication die Parameter zwingend verlangt, dürfen sie nicht weggelassen werden.

Hier ist alles weggelassen, was die Darstellung verschönert. Wenn Sie sich auf den Seiten http://qwt.sourceforge.net/annotated.html etwas umschauen, finden Sie, wie die Achsenbeschriftung, eine Titel, die Skalierung, etc. hinzugefügt werden können, aber dazu später.