Sur cette page

Affichage sur plusieurs écrans

« Spanning Screens » est un exemple qui montre comment permettre aux clients Wayland de s'étendre sur plusieurs écrans.

Introduction

« Spanning Screens » est un exemple de compositeur Wayland qui étend les clients sur un écran supérieur et un écran inférieur.

Deux fenêtres du compositeur dont la zone d'affichage s'étend sur les deux écrans

Pour une introduction aux principes de base de la création d’un Qt Wayland Compositor avec Qt, consultez l’exemple Minimal Qml.

Prise en charge de plusieurs écrans

Dans Qt Wayland Compositor un écran est représenté par une « WaylandOutput », et une «Window» est utilisée pour contenir la Qt Quick scène représentant à la fois les clients et l’interface utilisateur du compositeur.

Dans cet exemple, une configuration multi-écrans est émulée en créant deux fenêtres sur l’écran principal, mais le code peut facilement être modifié pour prendre en charge plusieurs écrans physiques.

// 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]

Comme chaque fenêtre représente une Qt Quick scène, il nous faut donc une astuce pour que le même contenu client s’affiche dans les deux fenêtres. Pour ce faire, Qt Wayland Compositor est de créer deux vues du même contenu client : une pour la fenêtre « du haut » et une pour celle « du bas ». Les vues partagent une référence au même tampon graphique sous-jacent. Cela nous permet de copier différentes zones de la surface du client sur chacune des fenêtres.

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

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

Lorsque le client se connecte à l’extension de shell XdgShell, nous créons deux références à la surface. L’une d’elles est ajoutée à la sortie « supérieure », et la seconde à la sortie « inférieure ». L’élément de la sortie « bottom » reçoit également un décalage correspondant à la hauteur de la sortie « top ». Cela garantit que la partie de la surface du client affichée sur la sortie « bottom » commence là où la sortie « top » se termine.

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

De plus, nous demandons au client de redimensionner sa surface afin qu’elle occupe à la fois la fenêtre du haut et celle du bas. Le résultat final est un client qui s’étend sur deux fenêtres, ou « écrans ».

Le fait de référencer la même surface client à partir de plusieurs éléments est un outil qui peut être utilisé à de nombreuses fins. Pour une démonstration d’un compositeur de type bureau où les fenêtres peuvent être déplacées d’un écran à l’autre, consultez l’exemple Multi Screen.

L’exemple « Multi Output » montre comment les surfaces client peuvent s’afficher sur plusieurs sorties présentant des tailles et d’autres propriétés différentes.

Remarque : afin de prendre en charge plusieurs sorties Wayland dans le même compositeur, l’attribut ` Qt::AA_ShareOpenGLContexts ` doit être défini avant la construction de l’objet ` QGuiApplication `.

Exemple de projet sur 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.