ubuntuusers.de

Qt5

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:


Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

Qt 🇬🇧 (gesprochen englisch cute 🇩🇪) ist ein C++-Framework zur plattformunabhängigen Erstellung von Software. Direkt unterstützte Sprachen sind C/C++, QML und Python über PySide 🇬🇧, es existieren aber zusätzliche Anbindungen für viele andere Sprachen 🇬🇧 wie Go, Java und Rust.

KDE-Software, inklusive des Plasma-Desktops verwenden seit jeher Qt als Basis und die KDE-Community trägt aktiv zur Entwicklung von Qt bei. Andere bekannte Programme sind bspw. der LXQt-Desktop von Lubuntu, der Nextcloud-Client, VirtualBox oder der für ubuntuusers.de entwickelte Editor InyokaEdit. Ubuntu Touch nutzt ebenfalls Qt.

Es gibt derzeit fünf Lizenzmodelle 🇬🇧 für Qt, darunter auch Open-Source-Lizenzen GPL und LPGL.

Den größten Bekanntheitsgrad hat Qt als Bibliothek zur Erstellung von grafischen Benutzeroberflächen, jedoch bringt Qt eine Vielzahl weiterer Module mit sich, die die Programmierung vereinfachen wie bspw. Netzwerkprogrammierung, Datenbankabstraktion, XML, OpenGL uvm. Mit Hilfe von Qt ist die Erstellung plattformübergreifender Anwendungen möglich. Neben den Unix-Derivaten mit XServer oder Wayland als Darstellungsserver werden u.a. Microsoft Windows, Apples Mac OS und iOS sowie Googles Android unterstützt. Dabei ist hervorzuheben, dass Qt für jede Plattform das gewohnte native Look_and_Feel mitbringt. Eine Übersicht der unterstützten Plattformen findet sich unter Supported Platforms, Targets and Languages 🇬🇧

Installation

Das grundlegende Paket bringt die nötigen, minimalen Konfigurationen und Bibliotheken mit, muss aber im Normalfall durch weitere Pakete ergänzt werden. Qt ist sehr gut dokumentiert. Die Dokumentation ist online verfügbar, kann aber auch mit Hilfe des Paketes qt5-doc offline verfügbar gemacht werden, was sich vor allem bei der Verwendung einer Entwicklungsumgebung lohnt. Ebenfalls stehen viele Beispiele zur Verfügung, die über zusätzliche Pakete installiert werden können (zur Suche kann man apt search qt5 demo oder apt search qt5 example verwenden).

  • qt5-default (universe)

  • qt5-qmake (universe (optional))

  • qtbase5-dev-tools (universe (optional))

  • qt5-doc (universe (optional))

Befehl zum Installieren der Pakete:

sudo apt-get install qt5-default qt5-qmake qtbase5-dev-tools qt5-doc 

Oder mit apturl installieren, Link: apt://qt5-default,qt5-qmake,qtbase5-dev-tools,qt5-doc

Hinweis:

Bei Ubuntu und Xubuntu müssen separate Bibliotheken wie die Netzwerk- oder D-Bus-Unterstützung zusätzlich installiert werden. In den anderen Derivaten gehören sie zur Standardinstallation dazu.

Benutzung

Die Wahl des Editors ist natürlich frei, es steht aber mit dem QtCreator eine ausgereifte Entwicklungsumgebung zur Verfügung, die sowohl Möglichkeiten zum Debugging, zur Analyse, Übersetzung und einen grafischen Editor mitbringt als auch die Möglichkeit bietet, in virtuellen Maschinen oder direkt auf einem Zielgerät zu testen oder zu installieren. Daneben stehen dem Entwickler viele Beispiele zur Verfügung.

KDevelop 🇬🇧 ist ebenfalls eine Entwicklungsumgebung für Qt, die spezialisiert auf Software von der und für die KDE-Community ist, aber natürlich auch frei eingesetzt werden kann.

Als Build-Umgebung wird qmake oder cmake eingesetzt. In zukünftigen Versionen (ab dem Release von Qt6) wird auf cmake als Standard umgestellt.

Signale und Slots

Einer der Gründe für den Erfolg des Qt-Frameworks sind Signale und Slots anstelle der ansonsten üblichen Callback-Funktionen. Diese dienen zur typsicheren Interprozesskommunikation und ermöglichen eine einfache Umsetzung von Ereignisbedingungen, die voneinander ausgelöst werden können. Dabei weiß der Sender nicht, ob oder wie viele Empfänger er bedient, so dass beliebig viele Aktionen von einem Signal ausgelöst werden können. Mittlerweile ist das Konzept in vielen anderen Bibliotheken vorhanden und stellt kein Alleinstellungsmerkmal dar.

QML

QML ist die Qt Modeling Language, die für die einfache und dynamische Gestaltung von Benutzeroberflächen entwickelt worden ist. QML ist deklarativ, die Syntax basiert auf JavaScript und JSON, ist aber dazu nicht kompatibel. Mit Hilfe von QML ist es möglich, das UI (UserInterface/die Benutzeroberfläche) unabhängig von der darunterliegenden Programmierung zu entwickeln. Auch wenn QML mit QtQuick in natives C++ kompiliert werden kann, ist es auch möglich, per Interpreter ausgeführt zu werden, sodass die Implementierung der UI in Form von Textdateien ausgeliefert werden kann. Zudem kann per import-Anweisung auf eine Vielzahl an verschiedenen C++-Methoden und Objekte zugegriffen werden. Ein Beispiel dafür sind die in Plasma genutzten Mini-Programme, die "Plasmoid" oder "Plasma-Applet" genannt werden.

Projektdatei (.pro)

Qt verwendet zur einfachen, plattformübergreifenden Beschreibung des build-Vorgangs Projektdateien. Diese bestehen aus den einzubeziehenden Modulen/Konfigurationen und enthalten eine Dateiliste der zu kompilierenden und zu linkenden Einzelteile. Ebenso können plattformspezifische Teile über Bedingungen („if-Abfragen“) angegeben werden.

qmake

QMake 🇬🇧 ist ein Helfer-Programm, das zur einfachen Generierung einer Projektdatei oder des Makefiles — oder des Äquivalents auf anderen Plattformen — dient und die entsprechenden Standard-Qt-Bibliotheken automatisch einbindet. Zusätzliche Module oder Konfigurationen können beim Aufruf mit angegeben werden, wie das mit QWidgets im Beispiel gezeigt wird.

cmake

Qt unterstützt ebenfalls cmake als Build-System, welches ab Qt6 zum Standard wird.

Das erste Programm

Natürlich kann hier keine erschöpfende Einführung in Qt und die verschiedenen von Qt verwendeten Konzepte gegeben werden. An dieser Stelle sei auf externe Literatur verwiesen. Im Folgenden wird die Erstellung einer einfachen Qt5-Anwendung gezeigt.

helloworld.cpp:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#include <QApplication>
#include <QPushButton>

int main(int argc, char *argv[])
{
  QApplication app(argc, argv);
  QPushButton hello("Hello world!");

  hello.show();
  return app.exec();
}

helloworld.pro: Die Datei kann manuell oder mit

qmake -project 'QT += widgets' 

angelegt werden.

1
2
3
4
QT      += widgets
TEMPLATE = app
TARGET   = helloworld
SOURCES += helloworld.cpp

Das Programm kann man dann kompilieren und ausführen[2]:

qmake
make
./helloworld 

Problemlösungen

Debugmodus für Qt-Anwendungen

Für Qt existieren einige mögliche Umgebungsvariablen. Um ein Programm gesprächiger zu machen, kann es mit

QT_DEBUG_PLUGINS=1 Programm 

gestartet werden.

extern

intern

  • Programme im hiesigen Wiki, die auf Qt basieren

Diese Revision wurde am 2. Januar 2022 19:34 von noisefloor erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Qt