多输出

多输出是一个演示带有多个输出的合成器的示例。

介绍

多输出示例演示了如何在不同的 WaylandOutputs 上以不同类型的合成显示相同的客户端。一个输出以统一网格显示客户端,缩放至相同大小。另一个输出是正常桌面风格的交互式合成器窗口。

有关如何使用 Qt 创建 Qt Wayland Compositor 的基本原理介绍,请参阅 最小 QML 示例

多个输出

示例创建了两个不同的窗口,每个输出一个。对于网格视图,我们连接到 surfaceRequested 信号。此信号针对客户端创建的每个表面都会被发出。这允许应用程序覆盖对请求的默认响应并创建自定义的 WaylandSurface

onSurfaceRequested: (client, id, version) => {
    var surface = surfaceComponent.createObject(comp, { } );
    surface.initialize(comp, client, id, version);
}

接收到信号后,示例创建一个 WaylandQuickItem 作为表面的视图。这可以像任何其他项一样添加到 Qt Quick 场景中。在示例中,我们将其添加到 GridView

对于桌面风格的窗口,我们使用 XdgShell 扩展的功能。当表面创建完成后,XdgShell 会发出 toplevelCreated 信号。

XdgShell {
    onToplevelCreated: (toplevel, xdgSurface) => {
        var item = chromeComponent.createObject(defaultOutput.surfaceArea, { "shellSurface": xdgSurface } );
        item.surface.activated.connect(item.raise);
    }
}

我们创建一个 ShellSurfaceItemXdgToplevel 添加到第二个输出。这使表面可以以桌面风格进行交互。

完成这些步骤后,客户端的内容将在两个窗口中可见。包含客户端内容的缓冲区对两个输出都是相同的,但以两种不同的方式可视化,并为用户提供了不同的交互方式。

注意:要支持同一合成器中的多个 Wayland 输出,必须在构造 QGuiApplication 对象之前设置 Qt::AA_ShareOpenGLContexts 属性。

示例项目 @ code.qt.io

另请参阅:多屏幕概述合成器

© 2024 Qt公司有限制公司。本文档中的文档贡献均为各自所有者的版权。提供的文档受《由自由软件基金会发布的 GNU自由文档许可证第1.3版条款`)。Qt及其相关标志是芬兰以及全球其他国家的Qt公司有限制公司的商标。所有其他商标均为各自所有者的财产。