JGU Logo JGU Logo JGU Logo JGU Logo

Institut für Informatik

Michael Wand
Christian Ali Mehmeti-Göpel
Wintersemester 2020/21DIGITAL

GUI Basics

Übung 9
Einführung in die Softwareentwicklung







Aufgabe Anlage zu Qt

Letzte Änderung: 09. October 2020, 09:29 Uhr
keine Punkteim Detail
Ansicht:   |  


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.





Aufgabe Validieren von Eingaben

Letzte Änderung: 19. January 2021, 09:50 Uhr
10 Punkteim Detail
Ansicht:   |  

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


  1. Erstellen Sie eine GUI, die ein Texteingabefeld anzeigt.
    Es reicht völlig aus, ein Textfeld auf einer sonst leeren Oberfläche zu platzieren.
  2. Wir wollen nun für das Textfeld einen 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 QValidators 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.
  3. Sollte der Benutzer einmal keine korrekte Eingabe gemacht haben, so soll sich die Hintergrundfarbe des Eingabefeldes in eine zufällige Farbe ändern. Bei korrekter Eingabe wird der Hintergrund wieder weiß.




Aufgabe Telefon

Letzte Änderung: 19. January 2021, 09:50 Uhr
15 Punkteim Detail
Ansicht:   |  

Wir möchten nun unsere grafische Oberfläche aus der letzten Aufgabe erweitern.


Implementieren Sie eine GUI für ein Telefontastenfeld:

  1. die Tasten (0-9), „Löschen“ und „Anrufen“ soll durch Buttons realisiert werden.
    Verwenden Sie zum Platzieren der Buttons einen geeigneten Layout-Manager.
  2. die aktuell getippt Nummer soll in einem Textfeld (QLineEdit) erscheinen
  3. Stellen Sie sicher, dass in dem Textfeld nur Zahlen eingegeben werden können. Hierzu könnte man z.B. einen QValidator nutzen.
  4. Implementieren Sie eine Funktion Ihrer Wahl für die Löschen- bzw. Anrufen-Taste.




Aufgabe (Deutschland)Karte zeichnen

Letzte Änderung: 19. January 2021, 09:50 Uhr
15 Punkteim Detail
Ansicht:   |  

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)
Die ersten 17 Zeilen der Datei sehen etwa so aus:
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.


  1. Lesen Sie die Datei ein und speichern Sie die 2D-Punkte nach Polygonzug getrennt ab. Die Art der Speicherung dürfen Sie frei wählen.

    Hinweis: Falls Sie probleme mit dem Einlesen haben, schauen Sie sich noch einmal Aufgabenblatt 03 an, wo wir auch schon eine solch einfach formattierte Datei eingelesen haben.
  2. Erstellen Sie eine GUI, auf der die Karte gezeichnet wird. Der Nutzer soll die Wahl haben, ob er die Karte grob (nur jeden 50. Punkt als groben Polygonzug interpretieren) oder fein (alle Punkte verbinden) angezeigt haben möchte.

    Hinweis: Beachten Sie, dass die Koordinaten der Karte sehr groß sind. Direkt die Position an der Stelle \((70894996,90916485)\) zu referenzieren geht nur bei SEHR großen Bildschirmen ;). Skalieren/Verschieben Sie also die Positionen global vor dem Zeichnen so um dass Sie überhaupt etwas sehen können.
  3. Fügen Sie einen Button hinzu, der bei Betätigung die Karte in eine Farbe ihrer Wahl einfärbt.
  4. Bonus: Implementieren Sie das Zoomen und Verschieben der Karte mit der Maus