Fenster- und Dialog-Widgets

Ein Widget, das nicht in ein übergeordnetes Widget eingebettet ist, wird als Fenster bezeichnet. Normalerweise haben Fenster einen Rahmen und eine Titelleiste, obwohl es auch möglich ist, Fenster ohne diese Dekoration zu erstellen, indem man geeignete Fensterflags verwendet. In Qt sind QMainWindow und die verschiedenen Unterklassen von QDialog die häufigsten Fenstertypen.

In Anwendungen stellen Fenster den Bildschirmbereich dar, auf dem die Benutzeroberfläche aufgebaut ist. Fenster trennen Anwendungen visuell voneinander und bieten in der Regel eine Fensterdekoration, mit der Sie die Größe und Position der Anwendungen nach Ihren Wünschen verändern können. Fenster sind in der Regel in die Desktop-Umgebung integriert und werden bis zu einem gewissen Grad von dem Fensterverwaltungssystem verwaltet, das die Desktop-Umgebung bereitstellt. So werden beispielsweise ausgewählte Fenster einer Anwendung in der Taskleiste angezeigt.

Primäre und sekundäre Fenster

Jedes QWidget, das kein Elternteil hat, wird zu einem Fenster und wird auf den meisten Plattformen in der Taskleiste des Desktops aufgeführt. Dies ist normalerweise nur für ein Fenster in der Anwendung, das primäre Fenster, erwünscht.

Darüber hinaus kann ein QWidget, das ein übergeordnetes Fenster hat, durch Setzen des Flags Qt::Window zu einem Fenster werden. Abhängig vom Fenstermanagementsystem werden solche sekundären Fenster in der Regel über ihr jeweiliges Elternfenster gestapelt und haben keinen eigenen Eintrag in der Taskleiste.

Die Klasse QMainWindow setzt das Flag Qt::Window in ihrem Konstruktor, da sie für die Verwendung als Fenster konzipiert ist und Funktionen bietet, die für untergeordnete Widgets nicht erwünscht sind.

Hauptfenster und Dialoge

Das Hauptfenster der Anwendung bietet den Rahmen für den Aufbau der Hauptbenutzeroberfläche der Anwendung und wird durch die Unterklasse QMainWindow erstellt. QMainWindow hat ein eigenes Layout, dem Sie ein menu bar, tool bars, dockable widgets und ein status bar hinzufügen können. Der mittlere Bereich kann von jeder Art von QWidget belegt werden.

Dialogfenster werden als sekundäre Fenster verwendet, die Ihnen Optionen und Auswahlmöglichkeiten bieten. Dialoge werden durch Unterklassen von QDialog erstellt und verwenden Widgets und Layouts, um die Benutzeroberfläche zu implementieren. Darüber hinaus bietet Qt eine Reihe von vorgefertigten Standarddialogen, die für Standardaufgaben wie die Auswahl von Dateien oder Schriften verwendet werden können.

Sowohl Hauptfenster als auch Dialoge können mit Qt Widgets Designer, dem visuellen Designwerkzeug von Qt, erstellt werden. Die Verwendung von Qt Widgets Designer ist viel schneller als die manuelle Programmierung und erleichtert das Testen verschiedener Designideen. Das visuelle Erstellen von Designs und das Lesen des von uic generierten Codes ist eine großartige Möglichkeit, Qt zu lernen!

Fenster-Geometrie

QWidget bietet mehrere Funktionen, die sich mit der Geometrie eines Widgets befassen. Einige dieser Funktionen wirken auf den reinen Client-Bereich (d.h. das Fenster ohne den Fensterrahmen), andere beziehen den Fensterrahmen mit ein. QWidget unterscheidet auf eine Art und Weise, die die gängigsten Anwendungen transparent abdeckt.

Beachten Sie, dass diese Unterscheidung nur für dekorierte Widgets der obersten Ebene von Bedeutung ist. Für alle untergeordneten Widgets ist die Rahmengeometrie gleich der Client-Geometrie des Widgets.

Dieses Diagramm zeigt die meisten der verwendeten Funktionen:

Geometry diagram

X11-Besonderheiten

Unter X11 hat ein Fenster keinen Rahmen, bis der Fenstermanager es dekoriert. Dies geschieht asynchron zu einem bestimmten Zeitpunkt nach dem Aufruf von QWidget::show() und dem ersten Malereignis, das das Fenster erhält, oder es geschieht überhaupt nicht. Bedenken Sie, dass X11 richtlinienfrei ist (andere nennen es flexibel). Daher können Sie keine sicheren Annahmen über den Dekorationsrahmen treffen, den Ihr Fenster erhalten wird. Grundregel: Es gibt immer einen Benutzer, der einen Fenstermanager verwendet, der Ihre Annahme verletzt, und der sich bei Ihnen beschweren wird.

Außerdem kann ein Toolkit nicht einfach Fenster auf dem Bildschirm platzieren. Alles, was Qt tun kann, ist, bestimmte Hinweise an den Fenstermanager zu senden. Der Fenstermanager, ein separater Prozess, kann diese entweder befolgen, ignorieren oder missverstehen. Aufgrund des teilweise unklaren Inter-Client Communication Conventions Manual (ICCCM) wird die Fensterplatzierung in bestehenden Fenstermanagern unterschiedlich gehandhabt.

X11 bietet keinen Standard oder einfachen Weg, die Rahmengeometrie zu erhalten, sobald das Fenster dekoriert ist. Qt löst dieses Problem mit raffinierten Heuristiken und cleverem Code, der mit einer Vielzahl der heute existierenden Fenstermanager funktioniert. Seien Sie aber nicht überrascht, wenn Sie einen finden, bei dem QWidget::frameGeometry() falsche Ergebnisse liefert.

X11 bietet auch keine Möglichkeit, ein Fenster zu maximieren. QWidget::showMaximized() muss diese Funktion emulieren. Das Ergebnis hängt vom Ergebnis von QWidget::frameGeometry() und der Fähigkeit des Fenstermanagers ab, das Fenster richtig zu platzieren, was beides nicht garantiert werden kann.

Wayland-Eigenheiten

Auf Wayland wird das programmatische Setzen oder Abrufen der Position eines Top-Level-Fensters von der Client-Seite normalerweise nicht unterstützt. Technisch gesehen, hängt dies von der Shell-Schnittstelle ab. Für typische Desktop-Compositors wird jedoch die Standard-Shell-Schnittstelle XDG Shell verwendet, die keine manuelle Positionierung von Fenstern unterstützt. In solchen Fällen ignoriert Qt Aufrufe zum Setzen der Top-Level-Position eines Fensters, und bei Abfragen wird die Fensterposition immer als QPoint(0, 0) zurückgegeben.

© 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.