스패닝 화면

스패닝 스크린은 Wayland 클라이언트가 여러 화면에 걸쳐 표시되도록 하는 방법을 보여주는 예시입니다.

소개

스패닝 스크린은 상단과 하단 화면에 걸쳐 클라이언트를 최대화하는 Wayland 컴포저 예제입니다.

Qt를 사용하여 컴포지터를 만드는 기본 원칙에 대한 소개는 Qt Wayland Compositor 를 만드는 기본 원리에 대한 소개는 최소 Qt Qml 예제를 참조하세요.

다중 화면 지원

에서 Qt Wayland Compositor 에서 화면은 WaylandOutput 로 표현되며, 창은 클라이언트와 컴포넌트를 모두 나타내는 Qt Quick 장면을 포함하는 데 사용됩니다.

이 예제에서는 기본 화면에 두 개의 창을 생성하여 멀티 스크린 설정을 에뮬레이트했지만, 여러 개의 실제 화면을 대상으로 하도록 코드를 쉽게 수정할 수 있습니다.

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

창은 고립된 Qt Quick 장면을 나타내므로 두 창 안에 동일한 클라이언트 콘텐츠가 표시되도록 하는 트릭이 필요합니다. 이 작업을 수행하는 방법은 Qt Wayland Compositor 에서 이를 수행하는 방법은 동일한 클라이언트 콘텐츠의 두 가지 보기를 만드는 것입니다: 하나는 '상단' 창용이고 다른 하나는 '하단' 창용입니다. 뷰는 동일한 기본 그래픽 버퍼에 대한 참조를 공유합니다. 이를 통해 클라이언트 표면의 서로 다른 영역을 각 창에 복사할 수 있습니다.

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

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

클라이언트가 셸 확장자 XdgShell 에 연결하면 서페이스에 대한 두 개의 참조가 생성됩니다. 그 중 하나는 "상단" 출력에 추가되고 다른 하나는 "하단"에 추가됩니다. 하단 출력의 항목은 상단 출력의 높이에 해당하는 오프셋도 가져옵니다. 이렇게 하면 하단 출력에 표시되는 클라이언트 표면의 일부가 상단 출력이 끝나는 곳에서 시작됩니다.

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

또한 클라이언트에 표면 크기를 조정하여 상단과 하단 창을 모두 채우도록 합니다. 최종 결과는 두 개의 창, 즉 "화면"에 걸쳐 있는 클라이언트입니다.

여러 항목에서 동일한 클라이언트 표면을 참조하는 것은 여러 가지 용도로 사용할 수 있는 도구입니다. 창을 화면 간에 이동할 수 있는 데스크톱 스타일 컴포저의 데모를 보려면 다중 화면 예제를 살펴보세요.

다중 출력 예제는 크기와 기타 속성이 다른 여러 출력에 클라이언트 표면을 표시하는 방법을 보여줍니다.

참고: 동일한 컴포저에서 여러 웨이랜드 출력을 지원하려면 QGuiApplication 객체를 구성하기 전에 Qt::AA_ShareOpenGLContexts 속성을 설정해야 합니다.

예제 프로젝트 @ code.qt.io

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