Qt GUI Überblick

Das Modul Qt GUI bietet Klassen für die Integration von Fenstersystemen, Ereignisbehandlung, OpenGL- und OpenGL ES-Integration, 2D-Grafik, grundlegende Bildgebung, Schriftarten und Text. Diese Klassen werden intern von den Qt-Benutzerschnittstellentechnologien verwendet, können aber auch direkt genutzt werden, um beispielsweise Anwendungen zu schreiben, die OpenGL ES-Grafik-APIs auf niedriger Ebene verwenden.

Für Anwendungsentwickler, die Benutzeroberflächen schreiben, bietet Qt APIs auf höherer Ebene, wie z. B. Qt Quick, die viel besser geeignet sind als die Enabler, die im Modul Qt GUI zu finden sind.

Anwendungsfenster

Die wichtigsten Klassen im Modul Qt GUI sind QGuiApplication und QWindow. Eine Qt-Anwendung, die Inhalte auf dem Bildschirm anzeigen möchte, muss diese Klassen verwenden. QGuiApplication enthält die Hauptereignisschleife, in der alle Ereignisse vom Fenstersystem und anderen Quellen verarbeitet und weitergeleitet werden. Sie kümmert sich auch um die Initialisierung und Finalisierung der Anwendung.

Die Klasse QWindow repräsentiert ein Fenster im zugrundeliegenden Windowing-System. Sie bietet eine Reihe virtueller Funktionen zur Verarbeitung von Ereignissen (QEvent) aus dem Fenstersystem, wie z. B. Berührungseingabe, Belichtung, Fokus, Tastenanschläge und Geometrieänderungen.

2D-Grafiken

Das Modul Qt GUI enthält Klassen für 2D-Grafiken, Bildbearbeitung, Schriftarten und erweiterte Typografie.

Ein QWindow, das mit dem Oberflächentyp QSurface::RasterSurface erstellt wurde, kann in Kombination mit QBackingStore und QPainter verwendet werden, der hoch optimierten 2D-Vektorgrafik-API von Qt. QPainter unterstützt das Zeichnen von Linien, Polygonen, Vektorpfaden, Bildern und Text. Weitere Informationen finden Sie unter Paint System und Raster Window Example.

Qt kann Bilder mit den Klassen QImage und QPixmap laden und speichern. Standardmäßig unterstützt Qt die gängigsten Bildformate, unter anderem JPEG und PNG. Benutzer können die Unterstützung für weitere Formate über die Klasse QImageIOPlugin hinzufügen. Für weitere Informationen siehe Lesen und Schreiben von Bilddateien.

Typografie in Qt erfolgt mit QTextDocument, das die QPainter API in Kombination mit den Qt-Schriftartenklassen, hauptsächlich QFont, verwendet. Anwendungen, die mehr Low-Level-APIs für die Handhabung von Text und Schriften bevorzugen, können Klassen wie QRawFont und QGlyphRun verwenden.

RHI-Grafiken

Das Qt Rendering Hardware Interface ist eine Abstraktion für hardwarebeschleunigte Grafik-APIs, wie OpenGL, OpenGL ES, Direct3D, Metal und Vulkan.

Als Alternative zur direkten Verwendung von OpenGL oder Vulkan zum Rendern auf QWindow bieten QRhi und die zugehörigen Klassen eine portable, plattformübergreifende 3D-Grafik- und Berechnungs-API, die durch eine Shader-Konditionierungs- und Transpilierungspipeline ergänzt wird. Auf diese Weise können Anwendungen die direkte Abhängigkeit von einer einzigen und in einigen Fällen hersteller- oder plattformspezifischen 3D-API vermeiden.

Nachstehend finden Sie eine Liste der wichtigsten RHI-bezogenen Klassen. Diese werden durch eine Reihe von zusätzlichen Klassen und Strukturen ergänzt.

Im RHI Window Example finden Sie ein einführendes Beispiel für die Erstellung einer portablen, plattformübergreifenden Anwendung, die mit QRhi ein beschleunigtes 3D-Rendering auf QWindow durchführt.

Die direkte Arbeit mit QWindow ist die fortschrittlichste und oft auch die flexibelste Art des Renderings mit der API QRhi. Es ist jedoch der niedrigste Ansatz und insofern eingeschränkt, als dass die UI-Technologien von Qt, Widgets und Qt Quick, überhaupt nicht genutzt werden. In vielen Fällen werden Anwendungen eher QRhi-basiertes Rendering in eine Widget- oder Qt Quick-basierte Benutzeroberfläche integrieren wollen. QWidget-basierte Anwendungen können das Fenster als natives Kind in die Widget-Hierarchie über QWidget::createWindowContainer() einbetten, aber in vielen Fällen bietet QRhiWidget einen bequemeren Enabler zur Integration von QRhi-basiertem Rendering in eine Widget-Benutzeroberfläche. Qt Quick bietet eine eigene Reihe von Enablern zur Erweiterung der 2D/3D-Szene mit QRhi-basiertem benutzerdefiniertem Rendering.

Hinweis: Die RHI-Familie von APIs wird derzeit mit einer begrenzten Kompatibilitätsgarantie angeboten, im Gegensatz zu den regulären öffentlichen Qt-APIs. Siehe QRhi für Details.

3D-Matrix und Vektormathematik

Das Modul Qt GUI enthält auch einige mathematische Klassen, die bei den häufigsten mathematischen Operationen im Zusammenhang mit 3D-Grafiken helfen. Zu diesen Klassen gehören QMatrix4x4, QVector2D, QVector3D, QVector4D und QQuaternion.

Integration von OpenGL und OpenGL ES

QWindow unterstützt das Rendering mit OpenGL und OpenGL ES, je nachdem, was die Plattform unterstützt. Das OpenGL-Rendering wird aktiviert, indem der Oberflächentyp von QWindow auf QSurface::OpenGLSurface gesetzt wird, die Formatattribute mit QSurfaceFormat ausgewählt werden und dann ein QOpenGLContext erstellt wird, um den nativen OpenGL-Kontext zu verwalten. Darüber hinaus verfügt Qt über QOpenGLPaintDevice, das die Verwendung von OpenGL-beschleunigtem QPainter Rendering ermöglicht, sowie über Komfortklassen, die das Schreiben von OpenGL-Code vereinfachen und die Komplexität der Handhabung von Erweiterungen und die Unterschiede zwischen OpenGL ES 2 und Desktop OpenGL verbergen. Zu den Komfortklassen gehört QOpenGLFunctions, mit dem eine Anwendung alle OpenGL ES 2-Funktionen von Desktop OpenGL nutzen kann, ohne die OpenGL-Funktionszeiger manuell auflösen zu müssen. Dies ermöglicht die plattformübergreifende Entwicklung von Anwendungen für mobile oder eingebettete Geräte und bietet Klassen, die native OpenGL-Funktionen in eine einfachere Qt-API verpacken:

Um eine bessere Unterstützung für die neueren Versionen (3.0 und höher) von OpenGL zu bieten, ist auch ein versionierter Funktions-Wrapper-Mechanismus verfügbar: Die Klassen der QOpenGLFunction_N_N-Familie stellen alle Funktionen einer bestimmten OpenGL-Version und eines bestimmten Profils zur Verfügung und ermöglichen so die einfache Entwicklung von Desktop-Anwendungen, die sich auf moderne, reine Desktop-OpenGL-Funktionen verlassen.

Für weitere Informationen siehe das OpenGL Window Example.

Ein mit QSurface::OpenGLSurface erstelltes QWindow kann in Kombination mit QPainter und QOpenGLPaintDevice verwendet werden, um OpenGL-Hardware-beschleunigte 2D-Grafiken zu erhalten, wobei ein Teil der visuellen Qualität verloren geht.

Vulkan-Integration

Qt GUI hat Unterstützung für die Vulkan-API. Qt-Anwendungen erfordern das Vorhandensein des LunarG Vulkan SDK.

Unter Windows setzt das SDK die Umgebungsvariable VULKAN_SDK, die vom Skript configure erkannt wird.

Unter Android wurden die Vulkan-Header in API-Level 24 des NDK hinzugefügt.

Die wichtigsten relevanten Klassen für die Low-Level-Vulkan-Unterstützung sind:

Darüber hinaus bietet QVulkanWindow eine Komfort-Unterklasse von QWindow, die den Einstieg in die Implementierung von Vulkan-basiertem Rendering mit QWindow erleichtert. Die Verwendung dieser Hilfsklasse ist völlig optional; Anwendungen mit fortgeschritteneren Vulkan-basierten Renderern können stattdessen direkt ein QWindow mit dem Typ QSurface::VulkanSurface verwenden.

Weitere Informationen finden Sie im Hello Vulkan Widget Beispiel und im Hello Vulkan Triangle Beispiel.

Ziehen und Ablegen

Qt GUI enthält Unterstützung für Drag and Drop. Weitere Informationen finden Sie in der Übersicht Drag and Drop.

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.