我想在Wayland Weston桌面系统中安排两个应用程序的焦点。有两种应用程序:
-
以qt/qml格式编写,全屏
-
使用Wayland客户端API+OpenGL编写,全屏
我想让app 1始终在最上面,app 2始终在最下面,即使我杀死了它们中的任何一个并重新出现。我也愿意这样做,而他们都是全屏应用程序。
我已经调查并发现了几种实现这一目标的方法:
-
使用
wmctrl
在桌面系统中排列窗口:我已经尝试过了。然而,我得到
Cannot open display.
. 后来我发现
WMCTRL
不适用于Weston/Xwayland,仅适用于X11。所以,我不再认为这是一个选择。
-
默认情况下,使app 1(qt/qml)始终位于顶部:为了解决此问题,我尝试在main.qml中添加以下内容:
ApplicationWindow {
visible: true
visibility: "FullScreen"
width: 1920
height: 720
flags: Qt.WindowStaysOnTopHint|Qt.FramelessWindowHint
MainScreen{
anchors.fill: parent
}
}
-
默认情况下,使应用程序2(Wayland客户端API/OpenGL)始终位于底部。老实说,我对Wayland客户机API不太熟悉,但是如果可能的话,我可以在一些指导下进行探索。
现在,我的重点是让qt应用程序始终处于顶层。它在我的电脑上工作,但在目标平台上不工作。我的电脑是Ubuntu 16.04,带有xorg。目标平台具有带有Xwayland后端的Weston合成器。我不知道为什么它在目标中不起作用。可能是桌面系统。任何指导和想法都会受到赞赏。谢谢
编辑:
主CPP
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
if (engine.rootObjects().isEmpty())
return -1;
return app.exec();
编辑
MQ.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
}
}
编辑:
Qt版本
PC上的Qt 5.10.1,目标平台上的Qt 5.8.0