Multipantalla
Multi Screen es un compositor Wayland de escritorio para múltiples pantallas.
Introducción
Multipantalla es un ejemplo de compositor Wayland al estilo de escritorio para múltiples pantallas.

Para una introducción a los principios básicos de la creación de un Qt Wayland Compositor con Qt, vea el ejemplo Minimal QML.
Soportando múltiples pantallas
Para cada pantalla disponible en el sistema, el ejemplo crea un CompositorScreen, que es una subclase de WaylandOutput. Si sólo hay una pantalla física disponible, el ejemplo emula tres pantallas con datos ficticios.
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 } }
Cada WaylandOutput contiene una Ventana, que se utiliza para contener el contenido del cliente, como es la configuración estándar con Qt Wayland Compositor. Como cada ventana está aislada de las demás, no podemos compartir ningún elemento de Qt Quick entre ellas. Por lo tanto, cuando un cliente se conecta y se crea un ShellSurface, se crea un ShellSurfaceItem en cada una de las pantallas.
for (var i = 0; i < screens.count; ++i) createShellSurfaceItem(shellSurface, moveItem, screens.objectAt(i));
Estos elementos sirven como vistas del mismo contenido del cliente. La propia superficie del cliente sólo se creará una vez, y será compartida por los elementos de superficie.
Los elementos de superficie de nivel superior se crean como hijos del fondo Rectangle en cada una de las salidas. Estas vistas se almacenan para más tarde, y si el cliente genera cualquier ventana hija, éstas se emparentan con el elemento de la ventana de nivel superior.
var parentSurfaceItem = output.viewsBySurface[shellSurface.parentSurface]; var parent = parentSurfaceItem || output.surfaceArea;
El contenido del cliente sólo será visible en una o dos pantallas a la vez. Las posiciones de ShellSurfaceItem están sincronizadas, de modo que cuando las ventanas entran en una pantalla, salen de otra al mismo tiempo. Esto da la apariencia de un único elemento que se mueve sin problemas entre pantallas. La posición global del cliente se almacena en un moveItem compartido y la posición relativa de los ShellSurfaceItem de cada pantalla se calcula a partir de ella. Si el moveItem se encuentra actualmente fuera de los límites de una pantalla, sus coordenadas lo reflejarán y no será visible en esa pantalla.
x: surfaceItem.moveItem.x - surfaceItem.output.geometry.x y: surfaceItem.moveItem.y - surfaceItem.output.geometry.y
Por último, se llama a WaylandQuickItem::setPrimary() en los momentos apropiados para establecer la vista primaria de ShellSurface, que se utiliza cuando el cliente pide ser maximizado o a pantalla completa. La vista primaria ShellSurfaceItem se selecciona en función de la parte visible en ese momento.
Nota: Para soportar múltiples salidas Wayland en el mismo compositor, el atributo Qt::AA_ShareOpenGLContexts debe ser establecido antes de que el objeto QGuiApplication sea construido. En el ejemplo, lo hacemos al principio de la función main().
QCoreApplication::setAttribute(Qt::AA_ShareOpenGLContexts, true);
Véase también Salida múltiple.
© 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.