Einführung in Qt - Achim Lingott - E-Book

Einführung in Qt E-Book

Achim Lingott

0,0

Beschreibung

• Neu in der 2. Auflage: Qt Charts, WebAssembly, Qt Quick 3D, SVG, selbsterstellte Widgets
• GUI-Erstellung mit Qt-Widgets, Qt Quick und QML
• Anbindung weiterer Qt- und C++-Klassen
• Beispiele mit CMake auf Grundlage der Bibliothek Qt 6
• Ihr exklusiver Vorteil: E-Book inside beim Kauf des gedruckten Buches

Qt ist ein mächtiges Entwicklungsframework, mit dem u. a. User Interfaces für Desktop-, Mobile-, Embedded- und IoT-Plattformen programmiert werden können. Es kommt in der Wissenschaft und in zahlreichen Branchen wie z. B. in der Medizintechnik und der automobilbranche zum Einsatz.

Dieses Buch bietet Ihnen eine strukturierte Einführung in die GUI-Programmierung mit Qt. Vom grundlegenden Aufbau der Qt-Bibliothek über die im Qt Framework enthaltenen Programme bis zu ihrem praktischen Einsatz lernen Sie alle für den Einstieg wichtigen Bereiche kennen. Dabei reicht das Themenspektrum von den Grundlagen über die Einbindung von Datenbanken und dem Aufbau von Web-Engines bis hin zur Einbindung in Netzwerke und der Nutzung von Charts.

Das Buch vermittelt Einsteigern mit Vorkenntnissen in C++ das Fundament, um eigene Qt-Anwendungen zu programmieren und fortgeschrittene Techniken, wie sie in der Industrie benötigt werden, zu erlernen.

UPDATE INSIDE // Registrieren Sie sich unter www.hanser-fachbuch.de/qt-update und erhalten Sie Buch-Updates zu den kommenden Qt-Versionen.

Sie lesen das E-Book in den Legimi-Apps auf:

Android
iOS
von Legimi
zertifizierten E-Readern
Kindle™-E-Readern
(für ausgewählte Pakete)

Seitenzahl: 223

Das E-Book (TTS) können Sie hören im Abo „Legimi Premium” in Legimi-Apps auf:

Android
iOS
Bewertungen
0,0
0
0
0
0
0
Mehr Informationen
Mehr Informationen
Legimi prüft nicht, ob Rezensionen von Nutzern stammen, die den betreffenden Titel tatsächlich gekauft oder gelesen/gehört haben. Wir entfernen aber gefälschte Rezensionen.



Achim Lingott

Einführung in Qt

Entwicklung von GUIs für verschiedene Betriebssysteme

2., überarbeitete Auflage

Ihr Plus – digitale Zusatzinhalte!

Auf unserem Download-Portal finden Sie zu diesem Titel kostenloses Zusatzmaterial.

Geben Sie auf plus.hanser-fachbuch.de einfach diesen Code ein:

plus-Gn4tp-r6L4g

Alle in diesem Werk enthaltenen Informationen, Verfahren und Darstellungen wurden nach bestem Wissen zusammengestellt und mit Sorgfalt geprüft und getestet. Dennoch sind Fehler nicht ganz auszuschließen. Aus diesem Grund sind die im vorliegenden Werk enthaltenen Informationen mit keiner Verpflichtung oder Garantie irgendeiner Art verbunden. Autor und Verlag übernehmen infolgedessen keine Verantwortung und werden keine daraus folgende oder sonstige Haftung übernehmen, die auf irgendeine Art aus der Benutzung dieser Informationen – oder Teilen davon – entsteht.Ebenso wenig übernehmen Autor und Verlag die Gewähr dafür, dass die beschriebenen Verfahren usw. frei von Schutzrechten Dritter sind. Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. in diesem Buch berechtigt deshalb auch ohne besondere Kennzeichnung nicht zu der Annahme, dass solche Namen im Sinne der Warenzeichen- und Markenschutz-Gesetzgebung als frei zu betrachten wären und daher von jedermann benutzt werden dürften.

Bibliografische Information der Deutschen Nationalbibliothek:Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.d-nb.de abrufbar.

Dieses Werk ist urheberrechtlich geschützt.Alle Rechte, auch die der Übersetzung, des Nachdruckes und der Vervielfältigung des Buches, oder Teilen daraus, vorbehalten. Kein Teil des Werkes darf ohne schriftliche Genehmigung des Verlages in irgendeiner Form (Fotokopie, Mikrofilm oder ein anderes Verfahren), auch nicht für Zwecke der Unterrichtsgestaltung – mit Ausnahme der in den §§ 53, 54 URG genannten Sonderfälle –, reproduziert oder unter Verwendung elektronischer Systeme verarbeitet, vervielfältigt oder verbreitet werden.

© 2023 Carl Hanser Verlag München, www.hanser-fachbuch.deLektorat: Sylvia HasselbachCopy editing: Sandra Gottmann, Wasserburg Bilder 4.12, 8.21, 8.24, 8.26: © Sven Lingott, BerlinUmschlagdesign: Marc Müller-Bremer, München, www.rebranding.deUmschlagrealisation: Max KostopoulosTitelmotiv: © gettyimages.de/a-r-t-i-s-tSatz: Eberl & Koesel Studio, Kempten

Print-ISBN:        978-3-446-47610-3E-Book-ISBN:   978-3-446-47784-1E-Pub-ISBN:     978-3-446-47785-8

Update inside. Mit unserem kostenlosen Update-Service zum Buch erhalten Sie aktuelle Infos zur GUI-Entwicklung mit Qt. Und so funktioniert es: 1. Registrieren Sie sich unter:www.hanser-fachbuch.de/qt-update 2. Geben Sie diesen Code ein: GKs2-pE4D-aKb5-45Hs Der Update-Service läuft bis Februar 2025. Als registrierter Nutzer werden Sie in diesem Zeitraum persönlich per E-Mail informiert, sobald ein neues Buch-Update zum Download verfügbar ist. Wenn Sie Fragen haben, wenden Sie sich gerne an: [email protected]

Inhalt

Vorwort

Updates und Aktualität

Danksagung

1 Einführung und erste Schritte

1.1 Download und Installation

1.2 Die Qt-Bibliothek

1.2.1 Die Klassen der Bibliothek

1.2.2 Die Module der Bibliothek

1.3 Die installierten Programme

1.4 Im Qt Creator erstellte Dateien und ihre Bedeutung

1.4.1 Datei CMakeLists.txt

1.4.2 Dateien .pro und .pri

1.4.3 Datei .ui

1.4.4 Datei ui_mainwindow.h

1.4.5 Datei main.cpp

1.5 Der Qt Designer

1.6 Das Signal-Slot-Prinzip

1.7 Qt in Microsoft Visual Studio

2 Das Erstellen von Qt-Widgets-Applikationen

2.1 Unterschiedliche Oberklassen

2.2 Eine Auswahl von Widgets

2.3 Qt-Widgets-Anwendung mit dem Qt Designer

2.3.1 Signal- und Slot-Funktionen miteinander verbinden

2.4 Erstellen ohne Qt Designer

2.5 Die Benutzung von Layouts

2.6 Das Erstellen und die Funktion von Menüs

2.7 Ein Beispiel mit QTabWidget

2.8 Ein zweites Formular hinzufügen

2.9 Widgets selbst erstellen

2.10 Maus- und Tastatur-Events

2.11 Shortcuts für die Bedienung des Qt Creators

2.12 Von den Programmen auszugebende Meldungen

2.13 Animationen mit Qt

3 Daten, Variablen und ihre Benutzung in Qt

3.1 Qt-Datentypen

3.2 Das Model-View-Prinzip und seine Realisierung

3.3 Das Qt-Event-System

3.4 Qt-Containerklassen

3.5 Die Speicherverwaltung in Qt

3.6 Multithreading in Qt

3.7 Die Klasse QVariant

4 Zeichnen in Widget-Applikationen

4.1 Grundlagen des Zeichnens

4.2 Zeichnen auf ein Fenster

4.3 Zeichnen auf ein Widget

4.4 Freie Zeichnungen mit der Maus auf ein Fenster

4.5 Charts

4.6 SVG

4.7 Transformation

4.8 Farbverläufe bei Füllungen

4.9 Zeichnen mit QGraphicsView auf QGraphicsScene

5 Ressourcen in Qt

5.1 Das Erstellen einer Ressourcendatei

5.2 Die Benutzung von StyleSheets

5.3 Die Verwendung von RTF und HTML

5.4 Lokalisierung von Qt-Applikationen

5.5 Dynamischer Wechsel der Sprache

6 Datenbankanbindung an Qt-Applikationen

6.1 SQL und Datenbankdesign ganz kurz

6.2 Eine Datenbankanwendung

6.3 Verbindung zu einem MySQL-Datenbankserver

6.4 Verbindung zu einem Microsoft SQL Server

6.5 Verbindung zu einer MS Access-Datenbank

6.6 Lesen von Daten aus einer Tabelle

6.7 Einen neuen Datensatz eintragen

7 Drucken und Dateibearbeitung

7.1 Grundlagen des Druckvorgangs

7.2 Ausdrucken von Text und Bildern

7.3 Dateien lesen und schreiben

7.4 Texteditor

8 Qt Quick und QML

8.1 Das Erstellen einer Qt-Quick-Anwendung

8.2 Der Quick Designer

8.3 QML-Typen

8.4 JavaScript in QML

8.5 Canvas

8.6 QML 3D

8.7 QML Charts

8.8 Mediaplayer

8.9 Lokalisierung von Quick-Applikationen

8.10 Animationen mit QML

8.11 Zustände und ihre Übergänge

8.12 Das Zustandsdiagramm und der Zustandseditor

8.13 QML-Applikationen als GUI für C++-Klassen

8.14 QML-Datentypen

8.15 Signale von und zu QML-Oberflächen

8.16 Drucken über eine QML-Oberfläche

8.17 Datenaustausch QML-GUI und C++-Klasse

8.18 Datenbankanbindung über ein QML-GUI

9 Qt-Applikationen für andere Plattformen

9.1 Qt-Applikationen für Android

9.2 Qt-Applikationen für WebAssembly

9.3 Qt-Applikationen für Linux

9.3.1 Qt und Ubuntu

9.3.2 Qt und openSUSE

9.3.3 Qt und CentOS

9.3.4 Qt und iOS

10 Client-Server-Applikationen

10.1 TCP-Server und -Client

10.2 D-Bus

10.3 CAN-Bus

10.4 DTLS

10.5 Bluetooth

11 Verschiedenes

11.1 qmake-Projekte in CMake-Projekte wandeln

11.2 Ein Projekt mit mehreren Unterprojekten

11.3 Exceptions in Qt

11.4 Debugging von Qt- und QML-Anwendungen

11.4.1 Qt-Anwendungen

11.4.2 QML-Anwendungen

11.5 Dokumentation

11.5.1 Qt-eigene Dokumentationsmöglichkeit

11.5.2 Dokumentation mit Doxygen

11.6 Deployment von Qt unter Windows

11.7 Qt und OpenGL

11.8 Desktop Styling der Qt Quick Controls

Literatur

Vorwort

Dieses Buch vermittelt Einsteigern mit C++-Vorkenntnissen die Grundlagen der Qt-Programmierung. Mit der hervorragenden Qt-Bibliothek lassen sich grafische User Interfaces für die unterschiedlichsten Anwendungsfälle programmieren.

Die 1. Auflage dieses Buches beruhte auf der damals gerade erschienenen Version 6.0 der Qt-Bibliothek. Dort waren noch nicht alle Module der vorhergehenden Version 5 enthalten, und es musste bei einigen Beispielen auf die Version Qt 5 zurückgegriffen werden. Das ist heute nicht mehr so.

Das Manuskript zur 2. Auflage wurde auf der Grundlage der Bibliotheksversion Qt 6.4 erstellt.

Ebenso werden alle Programme mit CMake erstellt, anstelle des in der 1. Auflage verwendeten qmake.

Einige Quelltexte sind in der vorliegenden 2. Auflage nicht mehr (oder nur in Ausschnitten) im gedruckten Buch zu finden, sondern auf dem Download-Portal. Sehen Sie sich also auf alle Fälle die vollständigen Quelltexte an, um die Beispiele auch zu verstehen.

Ihr Plus – digitale Zusatzinhalte!

Auf unserem Download-Portal finden Sie zu diesem Titel kostenloses Zusatzmaterial.

Geben Sie auf plus.hanser-fachbuch.de einfach diesen Code ein:

plus-Gn4tp-r6L4g

Auf dieser Webseite sind alle Quelltexte für die Projekte zu finden, die im Buch beschrieben werden.

Updates und Aktualität

Damit Sie möglichst lange mit diesem Buch arbeiten können, haben Sie die Möglichkeit, sich für den kostenlosen Update-inside-Service zu registrieren: Geben Sie unter

www.hanser-fachbuch.de/qt-update

diesen Code ein:

GKs2-pE4D-aKb5-45Hs

Dann erhalten Sie bis Februar 2025 Aktualisierungen in Form zusätzlicher Kapitel als PDF-Datei. Darin stelle ich Ihnen wichtige Neuerungen vor und gehe auf Änderungen ein, die die Inhalte dieses Buches betreffen.

Danksagung

An dieser Stelle möchte ich allen Beteiligten einen großen Dank aussprechen. Er gilt allen beteiligten Mitarbeitern des Carl Hanser Verlages, insbesondere Frau Sylvia Hasselbach und Frau Kristin Rothe, die sich stets allen meinen Fragen zu Inhalt und Gestaltung gestellt haben und hilfreich mit Ideen zur Seite standen.

Diesen Dank möchte ich aber auch an diejenigen richten, die, vermutlich ohne es zu ahnen, zur einen oder anderen Idee beigetragen haben: Das sind die Teilnehmer meiner Seminare, deren Fragen mich dazu anregten, das eine oder andere Problem etwas umfassender oder überhaupt anzugehen.

Und nun viel Spaß beim Lesen und bei der Arbeit mit Qt!

Achim Lingott

Der Verlag und die Autoren haben sich mit der Problematik einer gendergerechten Sprache intensiv beschäftigt. Um eine optimale Lesbarkeit und Verständlichkeit sicherzustellen, wird in diesem Werk auf Gendersternchen und sonstige Varianten verzichtet; diese Entscheidung basiert auf der Empfehlung des Rates für deutsche Rechtschreibung. Grundsätzlich respektieren der Verlag und die Autoren alle Menschen unabhängig von ihrem Geschlecht, ihrer Sexualität, ihrer Hautfarbe, ihrer Herkunft und ihrer nationalen Zugehörigkeit.

1Einführung und erste Schritte

Dieses Buch wurde hauptsächlich für Personen geschrieben, die Vorkenntnisse in der Programmiersprache C++ besitzen, aber bisher wenig oder nichts mit Qt zu tun hatten. Qt ist übrigens keine Abkürzung, sondern wird ausgesprochen wie das englische Wort cute.

Es soll Ihnen die Qt-Grundlagen nahebringen und Sie in die Lage versetzen sich selbstständig weiter mit Qt zu beschäftigen. Sie haben mit Qt eine ausgezeichnete Möglichkeit, grafische User Interfaces für verschiedene Programme zu erstellen. Vielleicht haben Sie schon C++-Programme, die jetzt statt einer Konsolenbedienung ein mit Qt erstelltes GUI erhalten sollen. Dieses Buch wäre ein Anfang dafür. Es soll zwar eine Einführung sein, wird aber an einigen Stellen doch weiter in die Tiefen der Qt-Programmierung, insbesondere die Qt-Bibliothek, einsteigen, um Ihnen wesentliche Zusammenhänge zu zeigen. Darauf können Sie dann später weiter aufbauen und Ihre eigenen Programme entwickeln.

Qt entstand Anfang der 1990er-Jahre und ist in C++ geschrieben. Es ist mehrfachlizenziert und kann sowohl für die Open-Source-Programmierung als auch kommerziell genutzt werden.

Qt 6 baut vollständig auf die Standardversion C++17 auf. Deshalb ist zur Erstellung auch ein C++17-kompatibler Compiler nötig. Qt für Windows unterstützt die Betriebssysteme Windows 10 und Windows 11 mit der Architektur x86_64. Die unterstützten Compiler sind MSVC 2019, MSVC 2022 und MinGW 11.2. Ansonsten ist es auch für Linux, macOS, Android, iOS und weitere Plattformen, z. B. auch für WebAssembly, erhältlich (WebAssembly ermöglicht die Darstellung von Qt-Applikationen im Browser).

Ab der Version 2013 wird als Entwicklungsumgebung Visual Studio von Microsoft unterstützt (siehe Abschnitt 1.7). Die Hauptmerkmale von Plug-ins für Visual Studio sind:

       Assistenten zum Erstellen neuer Qt-Projekte und Qt-Klassen

       Verwendung des Meta Object Compilers (moc), des User Interface Compilers (uic) und des Resource Compilers (rcc)

       Import und Export von Qt-Projektdateien

       Automatische Konvertierung eines Qt-Visual Studio-Projekts in ein Qt Creator-Projekt und umgekehrt

       Eingebautes Qt-Ressourcenmanagement

       Erstellen einer Übersetzungsdatei (.ts)

       Benutzung des Qt Linguist

       Qt-Dokumentation

Ebenso wie in Microsoft Visual Studio lassen sich Qt-Plug-ins auch in Eclipse, Netbeans oder in Code::Blocks verwenden.

Das Kompilieren und Linken von Qt-Quelltext wird wie üblich auf der Grundlage eines Makefiles durchgeführt, das von verschiedenen Programmen erstellt werden kann. In Qt existieren qmake und CMake. Es gibt Unterschiede. Das Programm qmake ist einfacher zu erlernen und bestens in Qt integriert, CMake ist schwieriger zu erlernen, bietet aber einige Vorteile, insbesondere beim Einbinden fremder Programme. Wir werden in den Buch-Beispielen grundsätzlich CMake verwenden.

Das Programm CMake benötigt eine Informationsdatei CMakeLists.txt.

Ein wichtiger Teil des Qt-Frameworks ist der Meta-Object Compiler (moc). Der moc durchsucht die Header-Dateien von Klassen nach C++-fremdem Quellcode und erstellt daraus C++-Quellcode, der gemeinsam mit den anderen C++-Inhalten kompiliert wird.

Bild 1.1Die Erstellung eines Qt-Projekts

Aktuelle Informationen zu den gültigen Bibliotheken, aktuellen Anwendungen und auch Beispiele finden Sie unter

https://www.qt.io/

1.1Download und Installation

Alle benötigten Programme und die Qt-Bibliothek erhalten Sie per Download von

https://www.qt.io/download

Wählen Sie Downloads for open source users. Auf den folgenden Seiten gelangen Sie zum Download des Qt Online Installer. Der Punkt Benutzerdefinierte Installation nach dem Download und dem Starten des Qt Online Installer ermöglicht Ihnen die Auswahl einzelner zu installierender Komponenten.

Bild 1.2Qt Setup und Installer

Wählen Sie die gezeigten Komponenten aus (Bild 1.3).

Bei Developer and Designer Tools benutzen Sie die Voreinstellungen.

Da sowohl die Bibliothek als auch die bereitgestellten Programme ständig weiterentwickelt werden, sehen die Installationsoberflächen und die Versionsangaben in Zukunft sicher anders aus. Arbeiten Sie also sinngemäß.

Bild 1.3Auswahl im Qt Installer

Der Download- und Installationsprozess dauert sicher einige Zeit. Nach Fertigstellung starten Sie den installierten Qt Creator einmal und sehen sich das Ergebnis an.

Bild 1.4Qt Creator nach dem Start

Es fällt sofort auf, dass sehr viele Beispielprogramme zu verschiedenen Themen mit installiert wurden. Sie erreichen diese Beispiele durch Einschalten der Willkommen-Seite (1) und anschließende Betätigung des Buttons Beispiele (2). Weiterhin gibt es Zugänge zu sehr vielen Anleitungen und dem Marktplatz, über den Sie viele Zusatzprodukte beziehen können. Zugänge zur Online-Community und zum Handbuch des Qt Creators ergänzen diese Seite (3). Über den dreieckigen Button (4) wird ein Programm gestartet. Der darunter liegende Button startet den Debugger (siehe Kapitel 11).

1.2Die Qt-Bibliothek

Die Bibliothek finden Sie unter

https://doc.qt.io/qt-6/

Unter Reference/All Qt C++ Classes sind die Informationen zu mehr als 1500 Klassen und unter All Qt Modules die Informationen zu den Modulen zu finden. Die Module unterteilen sich in Qt Essentials und Qt Add-Ons.

Die in den Qt Essentials enthaltenen Klassen sind grundlegend für alle Plattformen und werden für die meisten Qt-Anwendungen benötigt.

Die Add-on-Module werden eventuell zusätzlich für bestimmte Einsatzzwecke benötigt. Sie stehen aber möglicherweise nicht auf allen Plattformen zur Verfügung.

Das Installationsprogramm bietet die Möglichkeit, weitere Module herunterzuladen und zu installieren. Das können Sie auch bei bereits erfolgter Installation über den Punkt Qt Maintenance Tool tun. Auch über Uninstall Qt erreichen Sie diese Möglichkeit (lassen Sie sich nicht vom Namen täuschen).

1.2.1Die Klassen der Bibliothek

In der Bibliothek sind Klassen enthalten, die zur Erstellung und Gestaltung von GUIs benötigt werden, aber auch solche Klassen, die die Erstellung der dazugehörigen Logik ermöglichen. Das sind z. B. Klassen wie QSqlDatabase, die Sie zum Verbindungsaufbau zu einer Datenbank benötigen, oder QXmlReader zum Auswerten einer XML-Datei.

Viele Klassen sind abgeleitet von QObject. Diese Klasse stellt insbesondere Funktionen zur Verfügung, die von allen abgeleiteten Klassen benötigt werden, z. B. Funktionen wie connect() und disconnect().

Aber aufgepasst, wer andere Bibliotheken wie z. B. die von .NET oder Java kennt, hat gelernt, dass alle im Programm erzeugten Klassen automatisch von der Klasse Object abgeleitet sind. Das ist in Qt nicht so! Es gibt zwar eine Klasse QObject. Aber von dieser Klasse erfolgt keine automatische Ableitung, sondern eine solche Ableitung muss programmiert werden. Viele Klassen der Bibliothek sind von QObject abgeleitet.

Bild 1.5Ein sehr kleiner Ausschnitt der Qt-Bibliothek

Weitere Informationen können Sie in der Klassenbibliothek erhalten. Rufen Sie die Klasse QObject auf. Dort werden alle von dieser Klasse abgeleiteten Klassen angezeigt.

1.2.2Die Module der Bibliothek

Während die Klassennamen in der Regel mit Q beginnen (z. B. QWidget), beginnen die Namen der Module meist mit Qt (z. B. QtWidgets). An dieser Stelle ein paar Informationen zu wichtigen Modulen.

QtCore

Das Modul enthält Klassen mit nichtgrafischer Funktionalität und ergänzt C++ durch einige Eigenschaften, wie z. B.

       einen neuen Mechanismus für die Objektkommunikation, die signals und slots,

       ein Makro Q_OBJECT, das die Kommunikation über signals und slots sowie einige andere Eigenschaften ermöglicht,

       den Meta Object Compiler (MOC), der in jeder von QObject abgeleiteten Klasse C++-fremden Quellcode (wie signals, slots) in Code umwandelt, den jeder C++-Compiler verarbeiten kann,

       ein eigenes Property-System, das über ein Makro Q_PROPERTY ermöglicht, einen ähnlichen Zugriff auf Variablen zu erreichen, wie sie durch die Properties bei C# bekannt sind,

       Zeiger, die automatisch auf 0 gesetzt werden, wenn das referenzierte Objekt zerstört wird (solche Zeiger werden durch das Klassentemplate QPointer bereitgestellt),

       Unterstützung für die Erstellung benutzerdefinierter Typen.

Wichtige Klassen dieses Moduls sind z. B. QObject, QPointer, QVariant, QMetaType.

QtGUI

In diesem Modul sind die Basisklassen für grafische User Interfaces (GUI) enthalten, Klassen für die Ereignisbehandlung, OpenGL- und OpenGL ES-Integration, für Grafiken, Schriftarten und Text.

Für die weitergehende Entwicklung von Benutzeroberflächen bietet Qt mit dem Modul QtQuick eventuell besser geeignete Klassen und Funktionen. Das Modul QtGUI (und somit die darin enthaltenen Klassen) wird standardmäßig inkludiert.

Die wichtigsten Klassen dieses Moduls sind die Klassen QGuiApplication und QWindow.

QGuiApplication (abgeleitet von QCoreApplication) stellt die überschriebene statische Funktion instance() zur Verfügung. Diese gibt einen Zeiger zurück, der dem globalen Zeiger qApp entspricht.

QtQML

enthält alle Klassen für die Sprache QML (Qt Meta Language), die von Quick benötigt wird (dazu mehr in Kapitel 8 dieses Buches).

Im Modul sind auch die QML-Typen definiert (siehe Kapitel 8) und folgende QML-Objekttypen:

Component, QtObject, Binding, Connections, Timer

Eine JavaScript-Umgebung ist ebenfalls integriert.

QtQuick

Dieses Modul enthält die Standardbibliothek für QML-Applikationen (eine weitere Möglichkeit zum Erstellen von UI, siehe Kapitel 8) und die erforderliche Engine. Es werden alle grundlegenden Typen zum Erstellen einer Benutzeroberfläche mit QML bereitgestellt sowie eine Zeichenfläche und Möglichkeiten zur Animation und Kontrollelemente für Benutzeroberflächen.

QtWidgets

Dieses Modul stellt eine Reihe von Elementen zur Gestaltung von GUIs zur Verfügung, wie die Klassen QWidget, QPushButton, QFrame und andere sowie Klassen für Styles, Layouts und die Model-View-Architektur.

Im Bereich der Add-on-Module ist vielleicht das Modul QtPrintSupport zu erwähnen. Es enthält Klassen, die ein Drucken auf jeder Plattform ermöglichen. Ebenso lassen sich damit PDF-Dateien erzeugen (siehe Kapitel 7).

Auch wichtig kann das Modul QtSQL sein. Darin sind Klassen enthalten, die eine Integration von Datenbanken ermöglichen. Man könnte die Klassen grob in die Bereiche Datenbanktreiber, SQL-Zuständigkeit und GUI-Zuständigkeit einteilen (dazu mehr in Kapitel 6).

1.3Die installierten Programme

Qt Creator

Ein Bild davon ist weiter vorn zu finden (Bild 1.4). Qt Creator stellt eine Arbeitsumgebung für den Programmierer zur Verfügung, sowohl für Qt- als auch Quick-Applikationen. Seine Benutzung wird in Abschnitt 1.4 genauer beschrieben. Mit dem Ct Creator lassen sich auch reine C- und C++-Anwendungen erstellen, ebenso Qt-Projekte mit Python.

Außer dem Qt Creator gibt es inzwischen Plug-ins für andere C++-Entwicklungsumgebungen wie Visual Studio von Microsoft und Eclipse, Netbeans und Code::Blocks (siehe Abschnitt 1.7).

Alle Programme außer dem Qt Creator werden für jeden installierten Compiler und jede installierte Bibliotheksversion separat installiert. Deshalb finden Sie auch im Windows-Start-Verzeichnis jedes der folgenden Programme entsprechend oft.

Qt Assistant

Bild 1.6Qt Assistant

Mithilfe dieses Programms können Sie sich die Dokumentationen zu den in der Bibliothek vorhandenen Modulen und den dazugehörigen Klassen ansehen. Diese Informationen sind auch im Qt Creator erhältlich.

Qt Designer

Bild 1.7Qt Designer

Damit lassen sich GUIs auf grafischem Wege erstellen, indem gewünschte Widgets auf einem Fenster (dem Formular) nach der Methode What You See Is What You Get (WYSIWYG) platziert werden. Dieser Designer ist auch in den Qt Creator integriert und kann von ihm aus benutzt werden. In Plug-ins für andere Entwicklungsumgebungen steht er ebenfalls zur Verfügung. Der Qt Designer erstellt bei seiner Benutzung eine XML-Datei, in der die Einträge des Designers gespeichert werden. Mithilfe dieser XML-Datei können bereits erstellte Formulare auch in anderen Projekten wiederverwendet werden.

Qt Linguist

Bild 1.8Qt Linguist

Mithilfe dieses Programms können Sie entsprechend vorbereitete Zeichenketten (z. B. den Titel eines Fensters, Button-Beschriftungen oder die Inhalte eines Labels) in verschiedene Sprachen übersetzen lassen. Es entstehen Übersetzungsdateien, die beim Erstellen des Programms mit eingebunden werden können und somit beim Start automatisch die Zeichenketten in der gewünschten Sprache erscheinen lassen (siehe Abschnitt 5.4).

Konsole

Bild 1.9Konsole für MinGW mit Qt 6

Da die Qt-Programme bei der Installation nicht in die PATH-Variable des Betriebssystems eingetragen werden, ersparen Sie es sich, das Installationsverzeichnis zu suchen und in der Konsole zum entsprechenden Verzeichnis zu wechseln, wenn Sie die Konsole aus dem Qt-Ordner des Windows-Start-Verzeichnisses benutzen.

1.4Im Qt Creator erstellte Dateien und ihre Bedeutung

Beim Neuanlegen eines Projekts wird ein Projektverzeichnis erstellt, das alle Dateien enthält, die Sie auch im Projektexplorer des Qt Creator sehen. Weiterhin entsteht beim ersten Erstellen des Projekts ein weiterer Ordner, dessen Name sich nach Projektname, Bibliothek und Compiler richtet.

1.4.1Datei CMakeLists.txt

Diese Datei wird angelegt, wenn Sie bei der Projekterstellung als Build-System CMake auswählen. CMake erstellt eine Konfigurationsdatei – CMakeLists.txt. Mit dieser Datei können Sie ein solches Projekt auch aus dem Projektverzeichnis aufrufen. Genauso gibt es dort auch eine Datei CMakeLists.txt.user. Sie enthält alle notwendigen Informationen zu Rechner, Betriebssystem etc.

Der Projektexplorer im Qt Creator könnte jetzt so aussehen.

Bild 1.10Projektexplorer des Qt Creators bei Verwendung von CMake

Die Datei CMakeLists.txt könnte im Beispielprojekt folgenden Inhalt haben:

01 cmake_minimum_required(VERSION 3.5) 02 03 project(TestCMake LANGUAGES CXX) 04 05 set(CMAKE_INCLUDE_CURRENT_DIR ON) 06 07 set(CMAKE_AUTOUIC ON) 08 set(CMAKE_AUTOMOC ON) 09 set(CMAKE_AUTORCC ON) 10 11 set(CMAKE_CXX_STANDARD 11) 12 set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 14 find_package(QT NAMES Qt6 Qt5 COMPONENTS Widgets REQUIRED) 15 16 set(PROJECT_SOURCES 17 main.cpp 18 mainwindow.cpp 19 mainwindow.h 20 mainwindow.ui 21 ) 22 23 add_executable(TestCMake ${PROJECT_SOURCES}) 24 find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets REQUIRED) 25 target_link_libraries(TestCMake PRIVATE Qt6::Widgets)

Die Zeilen enthalten einzelne Funktionen und haben folgende Bedeutung:

       Zeile 1: Es wird die Mindestversion von CMake festgelegt.

       Zeile 3: Festlegen des Projektnamens und der Programmiersprache (CXX bedeutet C++)

       Zeilen 7 – 9 gestatten CMake, den Meta-Object Compiler (moc), Ressource Compiler (rcc) und den User Interface Compiler selbstständig bei Bedarf zu benutzen.

       Zeile 11 legt die Mindestversion des C++-Compilers fest.

       Zeilen 24, 25 enthalten die in der Bibliothek angegebenen Zeilen (Bild 1.11).

Bild 1.11Ausschnitt aus der Qt-Bibliothek

Weitere Informationen über CMake finden Sie hier:

https://doc.qt.io/qt-6/cmake-manual.html

1.4.2Dateien .pro und .pri

Sollten Sie als Build-System qmake wählen, erhalten Sie eine Datei mit der Endung .pro. Sie hat als Inhalte hauptsächlich Variablen, die in der Regel Listen von Zeichenketten enthalten (Informationen für qmake).

Wichtige Variablen sind z. B.:

QT

Sie erhält eine Liste der Module, die im Projekt verwendet werden. Damit ist es möglich, beim Inkludieren der Klassen durch den Präprozessor im Quelltext nur den Klassennamen anzugeben und nicht das Modul, in dem sich die Klasse befindet (z. B. #include <QSqlDatabase> und nicht #include <QtSql/QSqlDatabase>). Die dieser Variablen zu übergebenden Namen finden Sie in der Klassenbibliothek unter den jeweiligen Klassennamen (siehe Bild 1.11).

SOURCES

Sie enthält eine Liste aller Quelltextdateien des Projekts, z. B. main.cpp und mainwindow.cpp.

HEADERS

Hier sind alle Dateinamen der Headerdateien (.h) aufgeführt.

FORMS

Darin ist die vom Qt Designer verwendete XML-Datei enthalten. Bei mehreren Formularen im Projekt (z. B. weil ein Formular aus einem anderen aufgerufen wird) sind hier eventuell auch mehrere Dateien eingetragen.

RESOURCES

Dieser Variablen wird die benutzte Ressourcendatei zugewiesen (siehe Kapitel 5). Der Eintrag könnte z. B. so aussehen:

RESOURCES += res.qrc

Weitere Informationen finden Sie auf der Webseite

https://doc.qt.io/qt-6/qmake-project-files.html

In manchen Projekten können Sie auch Dateien mit der Endung .pri finden. Diese Dateien enthalten Teilinhalte der Projektdateien und werden von den .pro-Dateien inkludiert: include(teil.pri)

1.4.3Datei .ui

Diese Dateien, z. B. eine Datei mainwindow.ui, sind XML-Dateien, die vom Qt Designer erstellt und in das Projekt eingebunden werden. Wenn Sie also ein GUI mit dem Qt Designer erstellen, entsteht automatisch eine Datei .ui. Vom Projekt aus können Sie den Designer einfach durch Doppelklick auf diese Datei aufrufen.

Von solchen Dateien können sich auch mehrere in einem Projekt befinden, z. B. weil Sie ein Projekt mit mehreren Formularen benötigen und jedes Formular mit dem Designer erstellt wurde.

1.4.4Datei ui_mainwindow.h

Diese Datei (ihr Name richtet sich nach dem gewählten Namen der für das GUI zuständigen Klasse, z. B. ui_[Klassenname].h) wird normalerweise vom Programmierer nicht bearbeitet. Sie befindet sich deshalb in einem speziellen Ordner. Bei Anlegen eines Projekts wird erst einmal ein Ordner mit dem Namen des Projekts angelegt. Darin befinden sich die Quelltextdateien, die Projektdatei, die .ui-Datei und eine Datei CMakeLists.txt.user.

Ein weiterer Ordner trägt bei unserem Beispiel den Namen build-Test-Desktop_Qt_6_4_0_ MinGW_64_bit-Debug und enthält die ausführbare Datei (hier Test.exe).

In diesem build-Ordner ist in einem Unterordner Test_autogen/include auch die Datei ui_ mainwindow.h enthalten.

Diese Datei wird auf der Grundlage der .ui-Datei vom User Interface Compiler (uic) generiert. Es ist sinnlos, in dieser Datei als Programmierer Änderungen vornehmen zu wollen, denn sie wird beim nächsten Aufruf dieses Compilers, also bei der nächsten Benutzung des Qt Designers, wieder überschrieben.

Sollten Sie in diese Datei einmal hineinschauen, ist zu sehen, dass auch Instanzen von QMenuBar und QStatusBar erstellt werden, obwohl Sie in unserem Projekt nicht verwendetet werden. Man könnte also in solchen Projekten (die beim Anlegen mit der Oberklasse QMainWindow erstellt wurden) sofort ein Menü erstellen oder die Statuszeile nutzen.

1.4.5Datei main.cpp

Ein Beispiel zu unserem Test-Projekt sehen Sie hier:

01 #include "mainwindow.h" 02 #include <QApplication> 03 04 int main(int argc, char *argv[]) 05 { 06 QApplication a(argc, argv); 07 MainWindow w; 08 w.show(); 09 return a.exec(); 10 }

Beim Start des Programms wird die main()-Funktion aufgerufen. Sie erstellt als Erstes eine Instanz der Klasse QApplication (Zeile 6). Damit werden die Grundlagen eines künftigen Programms gelegt. Als nächster Schritt folgt die Erstellung einer Instanz der Klasse MainWindow, also der von uns programmierten Klasse, die abgeleitet ist von QMainWindow (die wiederum über QWidget abgeleitet ist von QObject und uns somit auch die Funktionen connect() zur Verfügung stellt, die wir später häufig benutzen werden). Die Funktion show() aus QWidget (der Oberklasse von QMainWindow) zeigt das gewünschte Formular, und die Funktion exec() der Klasse QApplication startet einen event loop. Diese Funktion wird erst beendet, wenn das Formular geschlossen wird. Solange wird auch die main-Funktion nicht beendet, und das Formular wird angezeigt.

Eigentlich könnten Sie in dieser main()-Funktion durchaus Qt- und C++-Quelltext mischen, beispielsweise so:

01 #include <QApplication> 02 #include <iostream> 03 using namespace std; 04 05 int main(int argc, char *argv[]) 06 { 07 QApplication a(argc, argv); 08 09 cout << "Hallo Qt-Buch...!"; 10 11 return a.exec(); 12 }

Das können Sie auch in einer bestehenden Qt-Widgets-Anwendung einmal ausprobieren, indem Sie die bestehende main.cpp durch diesen Quelltext ersetzen. Die Zeile 9 erzeugt jetzt eine Ausgabe im Qt Creator. Würden Sie eine reine Konsolenanwendung erstellen, ist diese Ausgabe auf der Konsole zu sehen.

Kommentarzeichen in Qt-Programmen

In allen Qt-Quelltexten gelten folgende Kommentarzeichen:

//

Kommentar bis Zeilenende

/* … */

mehrzeiliger Kommentar

/** … */

mehrzeiliger Dokumentationskommentar für Dokumentationstools wie Doxygen

/*! … */

Dokumentationskommentar für QDoc, ein Qt-eigenes Dokumentationstool

In der Datei CMakeLists.txt gilt das Doppelkreuz # als Kommentarzeichen bis Zeilenende.

1.5Der Qt Designer

Bild 1.12Qt Designer

Falls Sie im Qt Creator ein neues Projekt erstellen und die Checkbox zum Erzeugen der Formdatei auch aktiviert haben, steht Ihnen dieser Designer auch im Qt Creator zur Verfügung und Sie können ihn durch Doppelklick auf die entsprechende Formulardatei direkt aufrufen.

Im linken Teil des Qt Designer-Fensters sehen Sie den Werkzeugkasten. Hier werden Ihnen alle Widgets angezeigt, die Sie mit der Maus auf dem Formular des Programmes platzieren können.

Im mittleren Teil sehen Sie das Formular, wie es im später gestarteten Programm auch aussehen wird.

Im rechten Drittel wird oben ein Objekt-Explorer angezeigt, der Ihnen die erstellten Zeigernamen und die dazugehörigen Klassennamen anzeigt.

Rechts unten befindet sich das Eigenschaftsfenster mit allen Eigenschaften des Objektes, das Sie im Formular gerade markiert haben. Sie können diese Eigenschaften auch ändern, z. B. eine andere Schriftart oder Schriftgröße wählen, Texte für Fenstertitel oder Buttonbeschriftungen ändern. Auch die Verbindung zwischen Signal- und Slot-Funktionen kann hier erfolgen (mehr dazu in Kapitel 2).

1.6Das Signal-Slot-Prinzip

Dieses Prinzip ist grundlegend für Qt und ermöglicht die Realisierung einer ereignisgesteuerten Programmierung. Man könnte es auch als Anwendung des Observer Patterns ansehen.

Im Gegensatz zur Verwendung von Rückruffunktionen erfolgt hier eine lose Kopplung zwischen dem Aufrufer und dem Aufgerufenen. Beide müssen sich nicht zwangsläufig kennen.

Signale und Slots sind Funktionen, die entweder bereits in einigen Klassen der Qt-Bibliothek enthalten sind (wie z. B. die Signal-Funktion clicked() in der Klasse QAbstractButton) oder von Ihnen selbst in Ihrem Projekt programmiert werden müssen.

Eine Slot-Funktion ist eine normale Funktion, die Sie auch unabhängig vom Signal-Slot-Prinzip verwenden können. Im Quelltext der Klasse (in der entsprechenden .h-Datei) werden die Slot-Funktionen mit private slots oder public slots gekennzeichnet. Sollen diese Funktionen nur innerhalb der gleichen Klasse verwendet werden, wird die Variante private slots verwendet. Eine Funktion, die Sie als Slot verwenden wollen, darf keine Default-Werte für Variablen der Parameter haben.

Eine Signal-Funktion hat keinen Funktionskörper, sieht also aus wie der Prototyp einer Funktion. Sie wird im Quelltext mit signals gekennzeichnet. Signal- und Slot-Funktionen, die Sie miteinander verbinden wollen, benötigen die gleiche Parameterliste. Eine Signal-Funktion kann aber mehr Parameter haben als die zugehörige Slot-Funktion. Die überzähligen Parameter werden dann ignoriert.