1

wayland-weston デスクトップ システムで 2 つのアプリケーションのフォーカスを配置したいと考えています。2 つのアプリケーションは次のとおりです。

  1. Qt/QML で書かれたフルスクリーン
  2. Wayland Client API + OpenGL、フルスクリーンで作成

どちらかを殺してリスポーンしても、App#1 を常に上に、App#2 を常に下に維持したいと考えています。どちらもフルスクリーンアプリである間にこれを行いたいと思います。

私は調査し、これを達成するためのいくつかの方法を見つけました:

  1. デスクトップシステムでウィンドウを配置するために使用wmctrl:これを試しました。しかし、私は得るCannot open display.wmctrlWeston/XWayland では動作せず、X11 でのみ動作することが後でわかりました。したがって、これはもはやオプションではないと思います。

  2. App#1 (Qt/QML) をデフォルトで常に一番上にします: これを解決するために試したことは、main.qml に以下を追加したことです:

    ApplicationWindow {
        visible: true
        visibility: "FullScreen"
        width: 1920
        height: 720
        flags: Qt.WindowStaysOnTopHint|Qt.FramelessWindowHint
    
        MainScreen{
            anchors.fill: parent
        }
    }
    
  3. App#2 (Wayland Client API/OpenGL) をデフォルトで常に一番下にします。正直なところ、私は Wayland Client API にあまり詳しくありませんが、このようなことが可能であれば、いくつかのガイダンスで調べることができます。

現在、私の焦点は Qt アプリケーションを常にトップに置くことです。私の PC では動作しますが、ターゲット プラットフォームでは動作しません。私のPCはXorgを搭載したUbuntu 16.04です。ターゲット プラットフォームには、xwayland バックエンドを備えた Weston コンポジターがあります。ターゲットで機能しない理由がわかりません。それはおそらくデスクトップシステムです。ガイダンスやアイデアをいただければ幸いです。ありがとう

編集: main.cpp

    QGuiApplication app(argc, argv);
    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
    if (engine.rootObjects().isEmpty())
        return -1;
    return app.exec();

main.qmlを編集

import QtQuick 2.0
import QtQuick.Controls 2.0
import QtQuick.Window 2.2
import "app/main"

ApplicationWindow {
    visible: true
    visibility: "FullScreen"
    maximumWidth: 1920
    maximumHeight: 720
    minimumWidth: 1920
    minimumHeight: 720
    width: 1920
    height: 720
    title: qsTr("App")
    flags: Qt.FramelessWindowHint|Qt.WindowStaysOnTopHint

    MainScreen{
        anchors.fill: parent
    }

}

編集: PC上のQtバージョンQt 5.10.1、ターゲットプラットフォーム上のQt 5.8.0

4

2 に答える 2