Qt让应用程序在Weston/Wayland平台上始终名列前茅 [英] Qt Make Application Always on Top on Weston/Wayland Platform

查看:6
本文介绍了Qt让应用程序在Weston/Wayland平台上始终名列前茅的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在Wayland-Weston桌面系统中安排两个应用程序的焦点。有两个应用程序:

  1. 用Qt/QML编写,全屏
  2. 用Wayland客户端API+OpenGL编写,全屏

我希望应用程序#1始终位于顶部,应用程序#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客户端API不是很熟悉,但如果有可能的话,我可以通过一些指导来探索它。

目前,我的重点是使Qt应用程序始终位于首位。它可以在我的PC上运行,但不能在目标平台上运行。我的电脑是安装了Xorg的Ubuntu 16.04。目标平台具有带有xway land后端的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上的Qt 5.10.1,目标平台上的Qt 5.8.0

推荐答案

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

这篇关于Qt让应用程序在Weston/Wayland平台上始终名列前茅的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆