gpt4 book ai didi

linux - Qt Make 应用程序在 Weston/Wayland 平台上始终处于最前面

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:32:58 30 4
gpt4 key购买 nike

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

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

我想让 App#1 始终位于顶部,而 App#2 始终位于底部,即使我杀死并重生其中任何一个。我也想在它们都是全屏应用程序时执行此操作。

我已经调查并发现了几种实现此目的的方法:

  1. 使用 wmctrl 在桌面系统中排列窗口:我已经试过了。但是,我得到 Cannot open display.。后来我发现 wmctrl 不适用于 Weston/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 客户端 API/OpenGL)默认始终位于底部。老实说,我对 Wayland Client API 不是很熟悉,但如果可能的话,我可以在一些指导下探索它。

现在,我的重点是让 Qt 应用程序始终处于最前面。它适用于我的 PC,但不适用于目标平台。我的电脑是 Ubuntu 16.04,带有 Xorg。目标平台有 weston 合成器和 xwayland 后端。我不知道为什么它在目标中不起作用。它可能是桌面系统。任何指导和想法表示赞赏。谢谢

编辑: 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端Qt 5.10.1,目标平台Qt 5.8.0

最佳答案

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

关于linux - Qt Make 应用程序在 Weston/Wayland 平台上始终处于最前面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54474596/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com