Auf dieser Seite

Fenster- und Dialog-Widgets

Ein Widget, das nicht in ein übergeordnetes Widget eingebettet ist, wird als Fenster bezeichnet. In der Regel verfügen Fenster über einen Rahmen und eine Titelleiste, es ist jedoch auch möglich, mithilfe geeigneter Fensterflags Fenster ohne solche Elemente zu erstellen. In Qt sind „ QMainWindow “ und die verschiedenen Unterklassen von „ QDialog “ die gängigsten Fenstertypen.

In Anwendungen stellen Fenster den Bildschirmbereich bereit, auf dem die Benutzeroberfläche aufgebaut ist. Fenster trennen Anwendungen optisch voneinander und verfügen in der Regel über eine Fensterdekoration, die es Ihnen ermöglicht, die Größe der Anwendungen anzupassen und sie nach Ihren Vorlieben zu positionieren. 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 dargestellt.

Primäre und sekundäre Fenster

Jedes „ QWidget “, das kein übergeordnetes Fenster hat, wird zu einem Fenster und wird auf den meisten Plattformen in der Taskleiste des Desktops angezeigt. Dies ist in der Regel nur für ein Fenster der Anwendung gewünscht, nämlich das primäre Fenster.

Darüber hinaus kann ein „ QWidget “, das ein übergeordnetes Fenster hat, durch Setzen des Flags „ Qt::Window “ zu einem eigenständigen Fenster werden. Je nach Fensterverwaltungssystem werden solche sekundären Fenster in der Regel über ihrem jeweiligen übergeordneten Fenster gestapelt und verfügen nicht über einen 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 bereitstellt, die für untergeordnete Widgets nicht erforderlich sind.

Hauptfenster und Dialoge

Das Hauptfenster der Anwendung bildet das Gerüst für die Erstellung der Hauptbenutzeroberfläche der Anwendung und wird durch Unterklassenbildung von ` QMainWindow` erstellt. ` QMainWindow ` verfügt über ein eigenes Layout, dem Sie ein ` menu bar`, ` tool bars`, ` dockable widgets ` und ein ` status bar` hinzufügen können. Der mittlere Bereich kann mit jeder Art von ` QWidget` belegt werden.

Dialogfenster dienen als sekundäre Fenster, in denen Ihnen Optionen und Auswahlmöglichkeiten angezeigt werden. Dialoge werden durch Unterklassenbildung von ` QDialog ` erstellt, wobei Widgets und Layouts zur Implementierung der Benutzeroberfläche verwendet werden. Darüber hinaus stellt Qt eine Reihe vorgefertigter Standarddialoge bereit, die für Standardaufgaben wie die Datei- oder Schriftartauswahl verwendet werden können.

Sowohl Hauptfenster als auch Dialoge lassen sich mit dem „ Qt Widgets Designer“, dem visuellen Design-Tool von Qt, erstellen. Die Verwendung des „ Qt Widgets Designers“ ist wesentlich schneller als das manuelle Programmieren und erleichtert das Testen verschiedener Designideen. Das visuelle Erstellen von Designs und das Lesen des von uic generierten Codes ist eine hervorragende Möglichkeit, Qt zu erlernen!

Fenstergeometrie

QWidget bietet mehrere Funktionen, die sich mit der Geometrie eines Widgets befassen. Einige dieser Funktionen beziehen sich ausschließlich auf den reinen Client-Bereich (d. h. das Fenster ohne den Fensterrahmen), andere beziehen den Fensterrahmen mit ein. „ QWidget “ unterscheidet hier auf eine Weise, die die gängigsten Anwendungsfälle transparent abdeckt.

Beachten Sie, dass diese Unterscheidung nur für verzierte Widgets der obersten Ebene von Bedeutung ist. Bei allen untergeordneten Widgets entspricht die Rahmengeometrie der Client-Geometrie des Widgets.

Dieses Diagramm zeigt die meisten der verwendeten Funktionen:

Fenstergeometrie mit beschrifteten Abmessungen und Positionen

Besonderheiten von X11

Unter X11 hat ein Fenster erst dann einen Rahmen, wenn der Fenstermanager es mit einem Rahmen versieht. Dies geschieht asynchron zu einem bestimmten Zeitpunkt nach dem Aufruf von ` QWidget::show()` und dem ersten `paint`-Ereignis, das das Fenster empfängt – oder es geschieht gar nicht. Beachten Sie, dass X11 keine festen Vorgaben macht (andere bezeichnen dies als 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 widerlegt, und der sich bei Ihnen beschweren wird.

Außerdem kann ein Toolkit Fenster nicht einfach auf dem Bildschirm platzieren. Qt kann lediglich bestimmte Hinweise an den Fenstermanager senden. Der Fenstermanager, ein separater Prozess, kann diese entweder befolgen, ignorieren oder falsch interpretieren. Aufgrund des teilweise unklaren „Inter-Client Communication Conventions Manual“ (ICCCM) wird die Fensterplatzierung in den verschiedenen Fenstermanagern unterschiedlich gehandhabt.

X11 bietet keine standardisierte oder einfache Möglichkeit, die Rahmengeometrie abzurufen, sobald das Fenster dekoriert ist. Qt löst dieses Problem mit raffinierten Heuristiken und cleverem Code, der bei einer Vielzahl der heute existierenden Fenstermanager funktioniert. Seien Sie jedoch 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, die Fenster korrekt zu platzieren – beides kann nicht garantiert werden.

Besonderheiten von Wayland

Unter Wayland wird das programmgesteuerte Festlegen oder Abrufen der Position eines Fensters der obersten Ebene von der Client-Seite aus in der Regel nicht unterstützt. Technisch gesehen hängt dies von der Shell-Schnittstelle ab. Bei typischen Desktop-Compositoren ist die Standard-Shell-Schnittstelle jedoch XDG Shell, die keine manuelle Positionierung von Fenstern unterstützt. In solchen Fällen ignoriert Qt Aufrufe zum Festlegen der Position eines Fensters der obersten Ebene, und bei Abfrage wird die Fensterposition stets als QPoint(0, 0) zurückgegeben.

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