Auf dieser Seite

Bildschirme übergreifend

„Spanning Screens“ ist ein Beispiel, das veranschaulicht, wie Wayland-Clients auf mehrere Bildschirme ausgeweitet werden können.

Einführung

„Bildschirme übergreifend“ ist ein Wayland-Compositor-Beispiel, bei dem Clients über einen oberen und einen unteren Bildschirm maximiert werden.

Zwei Compositor-Fenster, wobei sich der Client über beide Bildschirme erstreckt

Eine Einführung in die Grundlagen der Erstellung eines Qt Wayland Compositor mit Qt finden Sie im Beispiel „Minimal QML“.

Unterstützung mehrerer Bildschirme

In Qt Wayland Compositor wird ein Bildschirm durch ein ` WaylandOutput` dargestellt, und ein ` Window ` dient dazu, die Qt Quick Szene, die sowohl die Clients als auch die Benutzeroberfläche des Compositors darstellt.

In diesem Beispiel wird eine Multi-Screen-Konfiguration emuliert, indem zwei Fenster auf dem primären Bildschirm erstellt werden; der Code lässt sich jedoch leicht anpassen, um mehrere physische Bildschirme zu bedienen.

// Enable the following to make the output target an actual screen,
// for example when running on eglfs in a multi-display embedded system.

// screen: Qt.application.screens[0]

Da jedes „Window“ eine isolierte Qt Quick Szene darstellt, benötigen wir einen Trick, um denselben Client-Inhalt in beiden Fenstern anzuzeigen. Dies lässt sich erreichen, Qt Wayland Compositor erfolgt durch die Erstellung von zwei Ansichten desselben Client-Inhalts: eine für das „obere“ Fenster und eine für das „untere“. Die Ansichten teilen sich einen Verweis auf denselben zugrunde liegenden Grafikpuffer. Dies ermöglicht es uns, verschiedene Bereiche der Client-Oberfläche in jedes der Fenster zu kopieren.

const topItem = chromeComponent.createObject(topSurfaceArea, {
    shellSurface
});

const bottomItem = chromeComponent.createObject(bottomSurfaceArea, {
    shellSurface,
    y: Qt.binding(function() { return -topSurfaceArea.height;})
});

Wenn der Client eine Verbindung zur Shell-Erweiterung XdgShell herstellt, erstellen wir zwei Verweise auf die Oberfläche. Einer davon wird der „oberen“ Ausgabe hinzugefügt, der zweite der „unteren“. Das Element in der unteren Ausgabe erhält zudem einen Versatz, der der Höhe der oberen Ausgabe entspricht. Dadurch wird sichergestellt, dass der Teil der Client-Oberfläche, der in der unteren Ausgabe angezeigt wird, dort beginnt, wo die obere Ausgabe endet.

const height = topSurfaceArea.pixelHeight + bottomSurfaceArea.pixelHeight;
const width = Math.max(bottomSurfaceArea.pixelWidth, topSurfaceArea.pixelWidth);
const size = Qt.size(width, height);
toplevel.sendFullscreen(size);

Außerdem weisen wir den Client an, die Größe seiner Oberfläche so anzupassen, dass sie sowohl das obere als auch das untere Fenster ausfüllt. Das Endergebnis ist ein Client, der sich über zwei Fenster bzw. „Bildschirme“ erstreckt.

Der Verweis auf dieselbe Client-Oberfläche aus mehreren Elementen heraus ist ein Werkzeug, das für viele Zwecke genutzt werden kann. Eine Demonstration eines Compositors im Desktop-Stil, bei dem Fenster von Bildschirm zu Bildschirm verschoben werden können, findest du im Beispiel „Multi Screen“.

Das Beispiel „Multi Output“ zeigt, wie Client-Oberflächen auf mehreren Ausgängen mit unterschiedlichen Größen und anderen Eigenschaften angezeigt werden können.

Hinweis: Um mehrere Wayland-Ausgänge im selben Compositor zu unterstützen, muss das Attribut „ Qt::AA_ShareOpenGLContexts “ gesetzt werden, bevor das „ QGuiApplication “-Objekt erstellt wird.

Beispielprojekt @ code.qt.io

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