DIGITAL
Programmierung von GUIs ist ein Thema, dass vieles bereits gelernte vorraussetzt, zusätzlich werden neue Dinge eingeführt. Damit Sie die Möglichkeit haben sich gründlich damit auseinanderzusetzen, wird sich dieses Blatt ausschließlich mit der Programmierung von GUIs in C++ mittels des Qt-Frameworks befassen. Dieses hat einige Vorteile:
[1] Für das Schlagwort „Qt C++“ gibt Google 23 Mio Suchergebnisse an.
Die Anlage enthält ein Tutorial mit den nötigsten Befehlen, um dieses Blatt bearbeiten zu können. Selbstverständlich steht es Ihnen frei auch die restliche Qt-Bibliothek zu verwenden — die Qt-Dokumentation ist vollständig1, übersichtlich strukturiert2 und enthält viele Tutorials und Beispiele.
[1] Glauben Sie mir, das ist auch heutzutage keine Selbstverständlichkeit.
[2] Alle Funktionen einer Klasse werden schön untereinander aufgelistet. Ein- und Ausgabeklassen haben meist eigene Unterseiten.
Wir beginnen damit, ein einfaches Texteingabefeld anzuzeigen und dessen Funktionsweise zu kontrollieren. Diese Aufgabe besteht darin durch einen QValidator
die Eingabe eines solchen Eingabefeldes auf Korrektheit zu überprüfen und dabei selbst zu definieren was eine korrekte Eingabe ist.
Einen speziellen QValidator
können wir wie folgt definieren:
class my_validator : public QValidator {
public:
my_validator(QObject *parent = nullptr);
virtual ~my_validator() override = default;
// wird von QLineEdit aufgerufen, wenn eine beliebige Taste gedrückt wird
// (darf den String und die Cursor-Position pos verändern)
virtual QValidator::State validate(QString &input, int &pos) const = 0
// wird von QLineEdit aufgerufen, wenn die Enter-Taste betätigt wird
// (darf den String verändern)
virtual void fixup(QString &input) const
};
QValidator::State
ist hierbei einer der Wert QValidator::Invalid
, QValidator::Intermediate
oder QValidator::Acceptable
. Siehe auch: QValidator States
QValidator
implementieren, um Vornamen zu überprüfen. In unserem Fall darf ein Vorname nur Groß- und Kleinbuchstaben enthalten, keine Leerzeichen oder Sonderzeichen, und muss immer mit einem Großbuchstaben beginnen. Überlegen Sie sich, wie Sie die drei Zustände des QValidator
s hier sinnvoll einsetzen. Wenn ein Nutzername beispielsweise keine Leerzeichen oder Sonderzeichen enthält, aber mit einem Kleinbuchstaben beginnt, soll QValidator::Intermediate
zurückgegeben werden, und die fixup
-Funktion kann dann genutzt werden können, um automatisch den ersten Buchstaben in einen Großbuchstaben umzuwandeln. Sie dürfen natürlich die Funktionen von Qts QString
und QChar
verwenden, falls Sie dort etwas finden, was bei dieser Aufgabe hilft.Wir möchten nun unsere grafische Oberfläche aus der letzten Aufgabe erweitern.
Implementieren Sie eine GUI für ein Telefontastenfeld:
QLineEdit
) erscheinenQValidator
nutzen.Ihre Aufgabe besteht darin eine Karte von Deutschland zu zeichnen.
Zu diesem Zweck steht die Datei deutschland.pol
zur Verfügung.
deutschland.pol
(4.9 Mb) 66
11
70894996 90916485
70894967 90916596
70894857 90916900
70894785 90917068
70894689 90917042
70894643 90916941
70894619 90916852
70894796 90916476
70894890 90916276
70894991 90916238
70894996 90916485
212
71167074 91096353
71166917 91096437
71166775 91096512
Diese Textdatei enthält die Umrisse der Bundesrepublik und der Bundesländer als Koordinaten. Die Zahl in der ersten Zeile gibt die Anzahl der Polygone an. Die Zahl in der zweiten Zeile gibt die Anzahl der Punkte des ersten Polygons an. Danach folgen die x- und y-Koordinaten des ersten Polygons. Nun beginnt das zweite Polygon, erneut mit der Anzahl der Punkte, usw.