Grafische Benutzeroberflächen mit Qt

Qt – Ein GUI-Framework für verschiedene Betriebssysteme

Anwendungen mit grafischen Benutzeroberflächen bieten dem Benutzer im allgemeinen eine hohe Flexibilität in Bezug auf die Reihenfolge von Arbeitsschritten. Diese Flexibilität bringt allerdings auch eine zum Teil hohe Komplexität der dahinterliegenden Anwendung mit sich: Es genügt nicht, zu einem bestimmten Zeitpunkt auf eine bestimmte Eingabe zu warten und diese zu verarbeiten. Stattdessen muss die Anwendung jederzeit mit unterschiedlichsten Eingaben (Tastendrücke, Mausbewegungen usw.) rechnen und darauf schnell und korrekt antworten.
Daher stellt die Entwicklung einer qualitativ hochwertigen Benutzeroberfläche in vielen Fällen einen erheblichen Anteil am gesamten Entwicklungsaufwand für eine Applikation dar.
Zudem ist der Markt an Betriebssystemen aufgefächert. Große Verbreitung haben die Betriebssysteme Windows, macOS und Linux. Eine Anwendung, die für mehrere Plattformen verfügbar ist, hat auch eine Aussicht auf eine größere Verbreitung.
Jedes dieser Betriebssysteme bietet eine Reihe von plattformspezifischen GUI-Frameworks an, die zwar auf ähnlichen Grundkonzepten basieren, sich aber in der Umsetzung so stark unterscheiden, dass die Portierung einer Anwendung von einer Plattform zur anderen durch den damit einhergehenden Wechsel des GUI-Frameworks mit erheblichen Kosten verbunden wäre.
Die Qt Bibliothek bietet hier einen Ausweg aus dem Dilemma, denn die Qt Bibliothek ist auf allen gängigen Betriebssystemen verfügbar. So können Anwendungen, die auf der Qt Bibliothek basieren, mit verhältnismäßig kleinem Aufwand von einer Plattform zu einer anderen portiert werden.

Historie

Die Entwicklung von Qt begann vor mehr als 20 Jahren als Projekt der norwegischen Softwareentwickler Haavard Nord und Eirik Chambe-Eng. Die Entwicklung wurde im 1994 gegründeten Unternehmen Trolltech fortgeführt. Trolltech wurde später von Nokia übernommen. Danach übernahm Digia Qt von Nokia. Heute ist Qt ein Produkt der Qt Group.

Lizenzen

Heute wird das Qt Framework in einer kommerziellen und in einer Open Source Version (GPL, LGPL) angeboten. Die beiden Versionen unterscheiden sich neben den unterschiedlichen Lizenzen auch im Funktionsumfang. Welche Lizenz für ein Projekt angebracht bzw. erforderlich ist, muss individuell entschieden werden.

Mehr als ein reines GUI-Framework

Qt bietet nicht nur eine einheitliche Schnittstelle zur Benutzeroberfläche sondern auch eine Abstraktionsebene zur Verwaltung von Threads, zur Netzwerkkommunikation, für Datenbankzugriffe und verschiedene andere betriebssystemnahe Komponenten.

Qt-Grundelemente

Qt verfolgt, wie die meisten GUI-Toolkits, einen objektorientierten Ansatz. Ein zentrales Element ist die QWidget Klasse. Eine Instanz von QWidget repräsentiert einen Bereich der Benutzeroberfläche. Sie ist für die Bildschirmdarstellung zuständig und verarbeitet Benutzeraktionen wie Mausbewegungen oder Tastatureingaben. Eine, von QWidget abgeleitete Klasse kann diese Aufgaben direkt übernehmen (zum Beispiel als Schaltfläche) oder zum Beispiel als Fenster, weitere QWidget Instanzen erzeugen, die als nachgeordnete Elemente die Darstellung und die Verarbeitung von Eingaben übernehmen.
QWidget-Elemente werden dabei im Anwendungscode selbst instanziiert und initialisiert. Damit wird auch die Darstellung bis ins Detail vom Anwendungscode bestimmt.
Qt bietet allerdings noch einen zweiten Ansatz zum GUI-Design an. Hier werden GUI-Elemente in sogenannten QML-Dateien spezifiziert. Diese Dateien werden beim Start der Anwendung geladen und vom Qt Quick Compiler kompiliert. Die kompilierten Dateien werden vom Qt System als Basis für die Erzeugung der GUI herangezogen. QML-Dateien können zudem um Javascript Code ergänzt werden, sodass bereits auf dieser Ebene das dynamische Verhalten der GUI spezifiziert werden kann.
Der Anwendungscode kann sich mehr oder weniger auf das Backend beschränken. Also auf jene Teile der Anwendung, die nicht unmittelbar der Darstellung auf dem Bildschirm dienen.
Eines der wichtigsten Konzepte bei Qt sind Signale und Slots. QWidget-Instanzen erzeugen Signale als Reaktion auf Benutzeraktionen wie beispielsweise Mausbewegungen oder Tastatureingaben. Ein wesentliche Aufgabe des Anwendungscodes einer GUI-Basierten Anwendung besteht darin, auf Benutzeraktionen zu warten und darauf zu reagieren. Dazu stellt die Anwendung Slots bereit. Im Prinzip handelt es sich dabei um (Member-)Funktionen. Während der Initialisierung der Anwendung werden bestimmte Signale mit bestimmten Slots verbunden. Werden anschließend Signale durch Benutzeraktivitäten ausgelöst, werden die Funktionen der angeschlossenen Slots ausgeführt.
Solche Reaktionen auf Benutzeraktivitäten müssen schnell erfolgen. Lange Reaktionszeiten würden sich als Ruckeln auf der Benutzeroberfläche bemerkbar machen. Langwierige Operationen sowie Operationen, die unter bestimmten Umständen zeitweise blockieren können, müssen daher in Threads ausgelagert werden, die parallel zum GUI-Code abgearbeitet werden.

Verfügbarkeit für verschiedene Sprachen

Die Qt Bibliothek ist primär für den Einsatz in C++ Programmen ausgelegt. Es gibt jedoch einige Projekte, die es sich zur Aufgabe gemacht haben, diese Bibliothek auch für andere Sprachen verfügbar zu machen. So bietet beispielsweise PySide die Möglichkeit, Python-Programme mit einer GUI auszustatten.

  • Gerne unterstützen wir Sie bei Ihrem Qt Projekt. In der Vorphase, während der Sie die verschiedenen Optionen prüfen, und auch gerne bei Ihrer konkreten Umsetzung
  • Nehmen Sie bitte Kontakt mit uns auf.