Die Klassenbibliothek Qt für C++

Willemers Informatik-Ecke

Standardwerk für C++-Einsteiger:

Bei Amazon bestellen


Wenn Ihnen C++ Spaß macht! Jetzt bestellen!


Ferien an der Flensburger Förde
Qt
Weitere Themen

Qt-Werkzeugkasten

Für die Entwicklung mit Qt wird neben der normalen Ausrüstung zur Erstellung von C++-Programmen noch das Programm qmake, make und der Qt-Designer zum Erstellen der Fenster benötigt. Wer noch keine IDE hat, kann Qt-Creator verwenden.

Unter Linux findet man das benötigte Werkzeug leicht im Software-Repository, indem man qt als Stichwort angibt.

Qt-Designer

Der Qt-Designer erstellt die Oberfläche eines Fensters durch Zusammenklicken der Elemente.

Das Ergebnis der Bemühungen wird in einer Datei mit der Endung .ui abgespeichert. Dabei handelt es sich um eine XML-Datei. Aus ihr wird dann der passende Source-Code für die Fensterklasse generiert werden.

qmake und make

Der Befehl qmake erstellt aus den anwesenden Dateien in einem Verzeichnis ein Projekt, wenn die Option -project verwendet wird. Ein weiterer Aufruf ohne Parameter führt dazu, dass ein Makefile erzeugt wird. Dieses wird dann klassisch per make abgearbeitet. Daraus ergibt sich auf der Kommandoebene die Reihenfolge der Befehle:
qmake -project
qmake
make

Qt-Creator

Der Qt-Creator stellt eine klassische IDE dar, die einen Editor zur Verfügung stellt und darüber hinaus auch die Aufgaben wie den Build-Prozess oder das Debuggen anstößt.

Qt-Mini-Programm

Das Hauptprogramm einer Qt-Anwendung erzeugt ein Objekt der Klasse QApplication mit den übergebenen Parametern und führt diese über deren Funktion exec() aus.

#include "personenfenster.h"
#include <QApplication>

int main(int argc, char**argv)
{
    QApplication a(argc, argv);
    PersonenFenster fenster;
    fenster.show();
    return a.exec();
}

Wenn die Anwendung ein Fenster besitzt, wird dies durch den Qt-Designer angelegt und durch eine eigene Klasse verwaltet. Die Datei personenfenster.h:

#ifndef PERSONENFENSTER_H
#define PERSONENFENSTER_H

#include "ui_personenfenster.h"

class PersonenFenster : public QMainWindow, public Ui::MainWindow
{
    Q_OBJECT

    public:
        PersonenFenster(QMainWindow *parent = 0);
        ~PersonenFenster();
};

#endif
Die Datei personenfenster.cpp
#include "personenfenster.h"

PersonenFenster::PersonenFenster(QMainWindow *parent)
{
    setupUi(this);
}

PersonenFenster::~PersonenFenster()
{
}
Mit dem Qt Designer wird nun ein Dialog erstellt, der als personenfenster.gui gespeichert wird.

qmake -project
qmake
make
Daraufhin sind einige Dateien entstanden, unter ihnen auch ui_personenfenster.h, das ja von personenfenster.h eingebunden wird. Daneben entstand auch das für den make erforderliche Makefile. Zuletzt aber auch eine ausführbare Datei, die nach dem Aufruf das Fenster darstellt, das im Qt Designer erstellt wurde.

Signale und Slots

Um Ereignisse zu fangen, müssen die Kontrollelemente mit einem Signal und einem Slot verbunden werden. Diese Verbindung wird typischerweise im Konstruktor durch den Aufruf von connect() hergestellt.
connect(actionBeenden, SIGNAL(triggered()), this, SLOT(beenden()));
connect(btAdd, SIGNAL(clicked()), this, SLOT(beenden()));
Die erste Zeile verbindet einen Menüeintrag über ein Trigger-Signal mit dem Slot beenden(). Die zweite Zeile verbindet einen Button btAdd über ein Click-Signal mit dem Slot beenden().

Ein Slot ist eine Funktion ohne Parameter und Rückgabewert, die als Slot gekennzeichnet wird. Die Funktion beenden() wird in der Klasse folgendermaßen als slot deklariert:

class PersonenFenster : public QMainWindow, public Ui::MainWindow
{
    Q_OBJECT

    public:
        PersonenFenster(QMainWindow *parent = 0);
        ~PersonenFenster();
    private slots:
        void beenden();
};
Die Funktion wird ganz normal definiert. In unserem Beispiel gibt sie für Demonstrationszwecke eine Meldung auf dem Bildschirm aus und beendet die Anwendung durch den Aufruf von close().
void PersonenFenster::beenden()
{
    std::cout << "huhu" << std::endl;
    close();
}
Nun sollte durch Auswahl des Menüpunktes actionBeenden oder durch Anklicken von btAdd die Funktion beenden() aufgerufen werden und damit das Programm enden.

Homepage (C) Copyright 2016 Arnold Willemer