E-Book, Deutsch, 198 Seiten
Reihe: Rheinwerk Computing
Theis Qt mit C++
1. Auflage 2024
ISBN: 978-3-367-10632-5
Verlag: Rheinwerk
Format: EPUB
Kopierschutz: 0 - No protection
Anwendungen mit Qt Designer und Qt Creator
E-Book, Deutsch, 198 Seiten
Reihe: Rheinwerk Computing
ISBN: 978-3-367-10632-5
Verlag: Rheinwerk
Format: EPUB
Kopierschutz: 0 - No protection
Das Lehrbuch zum GUI-Framework Qt!
Zur Entwicklung von GUIs mit C++ ist Qt die erste Wahl. Das Framework kann zur Anwendungsentwicklung in den unterschiedlichsten Bereichen eingesetzt werden und ist ein sehr flexibles Werkzeug – auch zur Cross-Plattform-Entwicklung.
Mit diesem exklusiven E-Book von Thomas Theis erfahren Sie anwendungsbasiert und praktisch alles, was Sie wissen müssen, um moderne GUIs programmieren zu können – sowohl mit den C++-Klassen von Qt Widgets als auch deklarativ mit QML und JavaScript in Qt Quick.
Von der Installation über die ersten Datenbank-Projekte bis zum Einsatz wichtiger Bibliotheken, mit vielen Codebeispielen, Aufgaben und Lösungen.
Aus dem Inhalt:
- Installation
- GUI-Anwendungen mit dem Qt Creator
- Widgets, Layouts, Menüs, Dialogfelder und mehr
- Datenbank-Anbindungen
- Intuitive Gestaltung mit dem Qt Designer
- Qt Quick mit QML und JavaScript
- Listen, States, Transitionen und Animationen
- Praxistipps und Übungen
Thomas Theis ist Dipl.-Ing. für Technische Informatik. Als Softwareentwickler verfügt er über langjährige Erfahrung, ebenso als IT-Dozent unter anderem an der Fachhochschule Aachen. Er ist Autor vieler erfolgreicher Fachbücher, zum Beispiel zu den Themen Python, C#, PHP, JavaScript, C++ und Unity.
Autoren/Hrsg.
Weitere Infos & Material
1. Einführung ... 9
1.1 ... Inhalt dieses Buchs ... 9
1.2 ... Beispiele und Übungsaufgaben ... 10
2. Qt Widgets, Steuerelemente ... 11
2.1 ... Ein- und Ausgabe von Text ... 11
2.2 ... Auswahl über Schalter ... 24
2.3 ... Auswahl über Optionen ... 27
2.4 ... Auswahl aus einer Liste ... 31
2.5 ... Ein- und Ausgabe von Zahlen ... 36
2.6 ... Übungsaufgabe ... 42
3. Qt Designer, weitere Möglichkeiten ... 45
3.1 ... Layout mit GridLayout ... 45
3.2 ... Layout mit Registerkarten ... 48
3.3 ... Layout mit Stacks ... 53
3.4 ... Hauptmenü und Statusleiste ... 59
3.5 ... Nachrichtendialogfelder ... 68
3.6 ... Eingabedialogfelder ... 73
3.7 ... Standarddialogfelder ... 81
3.8 ... Übungsaufgabe ... 88
4. Datenbanken mit SQLite ... 91
4.1 ... Der Aufbau einer Datenbank ... 91
4.2 ... Datenbank erzeugen und füllen ... 92
4.3 ... Daten auswählen und sortieren ... 103
4.4 ... Daten hinzufügen, ändern und löschen ... 112
4.5 ... Übungsaufgabe ... 123
5. Qt Quick, Steuerelemente ... 127
5.1 ... Ein- und Ausgabe von Text ... 127
5.2 ... Auswahl über Schalter ... 135
5.3 ... Auswahl über Optionen ... 138
5.4 ... Auswahl aus einer Liste ... 140
5.5 ... Ein- und Ausgabe von Zahlen ... 143
5.6 ... Übungsaufgabe ... 146
6. Qt Quick, weitere Möglichkeiten ... 149
6.1 ... Layout mit GridLayout ... 149
6.2 ... Layout mit Registerkarten ... 156
6.3 ... Hauptmenü ... 158
6.4 ... Kontextmenü ... 162
6.5 ... Nachrichtendialogfelder ... 164
6.6 ... Komponenten ... 168
6.7 ... Animationen ... 173
6.8 ... Zustände eines Objekts ... 177
6.9 ... Animierte Zustandsänderung ... 179
6.10 ... Zeichnungen erstellen ... 181
6.11 ... Übungsaufgabe ... 183
Anhang ... 185
Download und Installation von Qt ... 185
Index ... 189
2.5 Ein- und Ausgabe von Zahlen
Im Projekt WidgetsZahl werden Ihnen vier verschiedene Möglichkeiten zur unterschiedlich komfortablen Auswahl oder Eingabe von Zahlen gezeigt, siehe Abbildung 2.21.
Abbildung 2.21 Nach dem Start der Anwendung
Die Eingabe in dem bereits bekannten einzeiligen Texteingabefeld, einem Objekt der Klasse QLineEdit, muss zunächst in eine Zahl umgewandelt werden.
Die Klassen QSpinBox und QDoubleSpinBox bieten zwei unterschiedliche SpinBoxen. Darin kann eine ganze Zahl bzw. eine Dezimalzahl innerhalb definierter Grenzen eingegeben oder über Pfeiltasten nach oben oder unten ausgewählt werden.
Außerdem wird ein Objekt der Klasse QSlider eingesetzt. Es handelt sich dabei um einen Schieber (engl. Slider), der zur Auswahl einer ganzen Zahl innerhalb definierter Grenzen betätigt wird. Ein Slider kann horizontal oder vertikal dargestellt werden.
Für SpinBox und Slider gilt: Die Unter- und die Obergrenze des Zahlenbereichs, der Startwert sowie die Schrittweite können eingestellt werden.
Für das vorliegende Programm gilt:
-
In das einzeilige Texteingabefeld können beliebige Texte eingegeben werden. Der Text wird in eine Dezimalzahl umgewandelt. Stellt der Text keine gültige Zahl (gegebenenfalls mit Dezimalpunkt) dar, wird der Wert 0.0 übernommen.
-
In die SpinBox für ganze Zahlen können Werte zwischen 0 und 10 eingegeben werden. Mithilfe der Pfeiltasten kann der Wert in Schritten von 1 verändert werden. Der Standardwert ist 5.
-
In die SpinBox für Dezimalzahlen können Werte zwischen 0,0 und 10,0 eingegeben werden (mit Dezimalkomma). Mithilfe der Pfeiltasten kann der Wert in Schritten von 0,5 verändert werden. Die Zahlen werden mit einer Dezimalstelle angezeigt. Der Startwert ist 5,0.
-
Der Slider ist horizontal ausgerichtet. Es können wiederum ganzzahlige Werte zwischen 0 und 10 in Schritten von 1 bei einem Startwert von 5 ausgewählt werden.
2.5.1 Erstellen der GUI
Erstellen Sie das Projekt WidgetsZahl. Legen Sie im Modus Design den Wert 350 für die Eigenschaft Breite und den Wert 250 für die Eigenschaft Höhe der GUI fest. Ziehen Sie die Widgets in die GUI. Die beiden SpinBoxen und der horizontale Slider stammen aus der Gruppe Input Widgets.
In Abbildung 2.22 sehen Sie die Objektanzeige mit den Namen der Objekte. Für Objekte der Klasse QSpinBox wähle ich die Zeichenfolge sbx, für Objekte der Klasse QDoubleSpinBox die Zeichenfolge dsb und für Objekte der Klasse QSlider die Zeichenfolge sld.
Abbildung 2.22 Objektanzeige
Das einzeilige Texteingabefeld erhält die Breite 80, die beiden SpinBoxen die Breite 80 bzw. 100 und der Slider die Breite 300.
In Abbildung 2.23 sehen Sie die spezifischen Eigenschaften einer SpinBox für ganze Zahlen. Die im vorliegenden Programm geänderten Werte werden fett dargestellt.
Abbildung 2.23 Eigenschaften einer SpinBox für ganze Zahlen
Abbildung 2.24 zeigt die Eigenschaften einer SpinBox für Dezimalzahlen.
Abbildung 2.24 Eigenschaften einer SpinBox für Dezimalzahlen
In Abbildung 2.25 sind die Eigenschaften eines Sliders zu sehen.
Abbildung 2.25 Eigenschaften eines Sliders
2.5.2 Code für Ereignisse
Die Deklaration der Klasse MainWindow in der Datei mainwindow.h wird wie folgt ergänzt:
void ausgabe();
void intAusgabe(int);
void dblAusgabe(double);
Listing 2.16 Datei »mainwindow.h«, Ausschnitt
Das Betätigen des Buttons führt zur Methode ausgabe(), eine Wertänderung bei der SpinBox für ganze Zahlen und beim Slider zur Methode intAusgabe() und eine Wertänderung bei der SpinBox für Dezimalzahlen zur Methode dblAusgabe().
Es folgt der Konstruktor der Klasse MainWindow in der Datei mainwindow.cpp:
: QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);
setWindowTitle("WidgetsZahl");
setFixedSize(350, 250);
connect(ui->sbxZahl, SIGNAL(valueChanged(int)),
SLOT(intAusgabe(int)));
connect(ui->dsbZahl, SIGNAL(valueChanged(double)),
SLOT(dblAusgabe(double)));
connect(ui->sldZahl, SIGNAL(valueChanged(int)),
SLOT(intAusgabe(int)));
connect(ui->cmdAusgabe, SIGNAL(clicked()),
SLOT(ausgabe()));
}
Listing 2.17 Datei »mainwindow.cpp«, Konstruktor
Das Ereignis Wert wurde geändert wird bei den beiden SpinBoxen und dem Slider jeweils vom Signal valueChanged bemerkt und führt zum Aufruf einer der beiden Methoden intAusgabe() bzw. dblAusgabe(). Achten Sie darauf, den Typ des übergebenen Parameters, also int oder double, sowohl beim Signal als auch beim Slot in der Parameterliste aufzuführen. Sollte er fehlen, erfolgt keine Reaktion auf das Ereignis.
Der Klick auf den Button führt wie gewohnt zum Aufruf der Methode ausgabe():
{
double edt = ui->edtZahl->text().toDouble();
int sbx = ui->sbxZahl->value();
double dsb = ui->dsbZahl->value();
int sld = ui->sldZahl->value();
QString tx = QString::number(edt, 'f', 1);
tx += " / " + QString::number(sbx);
tx += " / " + QString::number(dsb, 'f', 1);
tx += " / " + QString::number(sld);
ui->lblAusgabe->setText(tx);
/*ui->lblAusgabe->setText(QString("%1 / %2 / %3 / %4")
.arg(edt, 0, 'f', 1).arg(sbx).arg(dsb, 0, 'f', 1).arg(sld));*/
}
Listing 2.18 Datei »mainwindow.cpp«, Methode »ausgabe()«
Der Text im einzeiligen Eingabefeld wird mithilfe der Methode toDouble() der Klasse QString in einen double-Wert umgewandelt. Sollte es sich bei dem eingegebenen Wert um keine gültige Dezimalzahl mit einem Punkt als Dezimaltrennzeichen handeln, liefert die Methode den Wert 0.0 zurück. Der umgewandelte Wert wird hier in der Variablen edt gespeichert.
Die Methode value() liefert den aktuellen Wert einer SpinBox oder eines Sliders zurück als int- bzw. double-Wert zurück. Die Werte werden hier in den Variablen sbx, dsb und sld gespeichert.
Die Überladung der statischen Methode number() der Klasse QString für double-Werte hat mehrere Parameter. Der zweite Parameter gibt das Format an. Hier ist es f für eine Fließkommazahl. Der dritte Parameter legt die Anzahl der Dezimalstellen fest, auf die gerundet wird.
Die Ausgabe wird aus insgesamt vier Teilen zusammengesetzt und in der Variablen tx gespeichert. Diese wird anschließend im Label ausgegeben.
In dem auskommentierten Bereich sehen Sie eine alternative Methode zur Ausgabe der Werte in einer einzigen Anweisung. Der hier genutzte Konstruktor der Klasse QString enthält einen Text mit den vier Platzhaltern %1, %2, %3 und %4. Die Inhalte der Platzhalter werden nacheinander durch verkettete Aufrufe der Methode arg() geliefert. Die Parameter der Methode arg() ähneln den Parametern der Methode number(). Bei Fließkommazahlen wird ein zusätzlicher zweiter Parameter eingeschoben, der die Mindestausgabebreite der umgewandelten Zahl angibt.
Es folgt die Methode intAusgabe():
...



