我想在 Wayland-Weston 桌面系统中安排两个应用程序的焦点。两个应用是:
- 用 Qt/QML 编写,全屏
- 使用 Wayland 客户端 API + OpenGL 编写,全屏
我想让 App#1 始终位于顶部,App#2 始终位于底部,即使我杀死并重生其中任何一个。我也想在它们都是全屏应用程序时执行此操作。
我进行了调查并发现了几种实现此目的的方法:
Using 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
}
}
默认情况下,使 App#2(Wayland 客户端 API/OpenGL)始终位于底部。老实说,我对 Wayland Client API 不太熟悉,但如果可能的话,我可以在一些指导下探索它。
现在,我的重点是让 Qt 应用程序始终位于最前面。它在我的电脑上工作,但在目标平台上不起作用。我的电脑是 Ubuntu 16.04,带有 Xorg。目标平台有 weston compositor 和 xwayland 后端。我不知道为什么它在目标中不起作用。可能是桌面系统。任何指导和想法表示赞赏。谢谢
EDIT:主程序
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
if (engine.rootObjects().isEmpty())
return -1;
return app.exec();
EDIT主程序.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
}
}
EDIT:Qt版本
PC 上的 Qt 5.10.1,目标平台上的 Qt 5.8.0
我在 Qt Bugs 上提出了一个问题,并从 Qt 员工那里了解到,由于 Weston 合成器的限制,这是不可能的。因此,我要么创建自己的合成器,要么使用不同的合成器。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)