Multi Screen
Multi Screen est un compositeur Wayland de type bureau destiné à la gestion de plusieurs écrans.
Introduction
Multi-screen est un exemple de compositeur Wayland de type bureau pour plusieurs é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
Pour chaque écran disponible sur le système, l’exemple crée une instance de ` CompositorScreen`, qui est une sous-classe de ` WaylandOutput`. S’il n’y a qu’un seul écran physique disponible, l’exemple émule trois écrans à l’aide de données factices.
Instantiator {
id: screens
model: emulated ? emulatedScreens : Qt.application.screens
delegate: CompositorScreen {
surfaceArea.color: "lightsteelblue"
text: name
compositor: comp
screen: emulated ? Qt.application.screens[0] : modelData
Component.onCompleted: if (!comp.defaultOutput) comp.defaultOutput = this
position: Qt.point(virtualX, virtualY)
windowed: emulated
}
}Chaque ` WaylandOutput ` contient une `Window`, qui sert à contenir le contenu client, conformément à la configuration standard de Qt Wayland Compositor. Chaque Window étant isolée des autres, il n’est pas possible de partager des éléments d’ Qt Quick entre elles. Par conséquent, lorsqu’un client se connecte et qu’une ShellSurface est créée, une ShellSurfaceItem est créée sur chacun des écrans.
for (var i = 0; i < screens.count; ++i)
createShellSurfaceItem(shellSurface, moveItem, screens.objectAt(i));Ces éléments servent de vues du même contenu client. La surface du client elle-même ne sera créée qu’une seule fois et sera partagée par les éléments de surface.
Les éléments de surface de niveau supérieur sont créés en tant qu’enfants de l’ Rectangle d’arrière-plan dans chacune des sorties. Ces vues sont stockées pour une utilisation ultérieure, et si le client génère des fenêtres enfants, celles-ci sont rattachées à l’élément de la fenêtre de niveau supérieur.
var parentSurfaceItem = output.viewsBySurface[shellSurface.parentSurface];
var parent = parentSurfaceItem || output.surfaceArea;Le contenu du client ne sera visible que sur un ou deux écrans à la fois. Les positions des « ShellSurfaceItem » sont synchronisées de sorte que, lorsqu’une fenêtre entre sur un écran, elle est simultanément déplacée hors d’un autre. Cela donne l’impression d’un élément unique se déplaçant de manière fluide d’un écran à l’autre. La position globale du client est stockée dans une variable partagée ` moveItem `, et la position relative de l’` ShellSurfaceItem ` de chaque écran est calculée à partir de celle-ci. Si l’` moveItem ` se trouve actuellement en dehors des limites d’un écran, ses coordonnées refléteront cette situation et elle ne sera pas visible sur cet écran.
x: surfaceItem.moveItem.x - surfaceItem.output.geometry.x
y: surfaceItem.moveItem.y - surfaceItem.output.geometry.yEnfin, la fonction WaylandQuickItem::setPrimary() est appelée au moment opportun pour définir la vue principale de l’ ShellSurface, qui est utilisée lorsque le client demande à être agrandi ou affiché en plein écran. L’ ShellSurfaceItem principale est sélectionnée en fonction de la partie de celle-ci qui est actuellement visible.
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 `. Dans l’exemple, nous effectuons cette opération au tout début de la fonction ` main() `.
QCoreApplication::setAttribute(Qt::AA_ShareOpenGLContexts, true);Voir aussi Sorties multiples.
© 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.