Qt使应用程序始终位于Weston/Wayland平台的顶部



我想在一个wayland-weston桌面系统中安排两个应用程序的焦点。两个应用程序是:

  1. 用Qt/QML编写,全屏
  2. 使用Wayland Client API+OpenGL编写,全屏

我想让应用程序#1始终在顶部,应用程序#2始终在底部,即使我杀死并重生了它们中的任何一个。当它们都是全屏应用程序时,我也想这样做。

我已经调查并发现了几种实现这一点的方法:

  1. 使用wmctrl在桌面系统中排列窗口:我已经尝试过了。然而,我得到了Cannot open display.。后来我发现wmctrl不适用于Weston/XWayland,只适用于X11。所以,我认为这不再是一个选择。

  2. 默认情况下,让应用程序#1(Qt/QML)始终处于顶部:为了解决这个问题,我在我的main.QML:中添加了以下内容

    ApplicationWindow {
    visible: true
    visibility: "FullScreen"
    width: 1920
    height: 720
    flags: Qt.WindowStaysOnTopHint|Qt.FramelessWindowHint
    MainScreen{
    anchors.fill: parent
    }
    }
    
  3. 默认情况下,使应用程序#2(Wayland Client API/OpenGL)始终位于底部。老实说,我对Wayland Client API不太熟悉,但如果有可能的话,我可以在一些指导下探索它。

现在,我的重点是让Qt应用程序始终处于领先地位。它在我的电脑上工作,但在目标平台上不工作。我的电脑是Ubuntu 16.04,带有Xorg。目标平台具有带有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
}
}

编辑:Qt版本PC上的问题5.10.1,目标平台上的问题5.8.0

我打开了一个关于Qt Bugs的问题,并从一名Qt员工那里了解到,由于Weston compositor的限制,这是不可能的。所以,我要么创建自己的合成器,要么使用不同的合成器。

您应该在主C++文件中设置标志

编辑

这适用于Qt/C++应用程序:

setWindowFlags(Qt::Window | Qt::CustomizeWindowHint | Qt::FramelessWindowHint);
showFullScreen();

你可以按照这里的指南:

Windows标志

对于QML,您可以在.QML文件中使用:

import QtQuick.Window 2.2 // Window.FullScreen
import QtQuick.Controls 1.3 // ApplicationWindow
ApplicationWindow
{
id: window
onActiveChanged: {
window.visibility = activeFocusItem ? Window.FullScreen :  Window.Minimized;
}
}    

相关内容

  • 没有找到相关文章

最新更新