如何控制X11 app级窗口堆叠?

时间:2017-06-25 21:24:17

标签: x11 ewmh

有没有办法让X11中有2个窗口,符合以下条件:

  • 第二个窗口始终位于第一个窗口
  • 之上
  • 第二个窗口不会停留在其他应用程序的窗口
  • 之上
  • 切换窗口时没有闪烁
  • 两个窗口都需要是顶级窗口(不是彼此之间的父级)而不是阻止

使第二个模态几乎起作用,但它会阻挡第一个,这是不可取的。

1 个答案:

答案 0 :(得分:1)

以下是如何通过创建非模态QDialog小部件来在Qt中执行此操作。

#include <QObject>
#include <QApplication>
#include <QPushButton>
#include <QDialog>

int main(int argc, char **argv)
{
    QApplication a(argc, argv);

    QPushButton p1("moo", 0);

    QDialog d1(&p1);
    QPushButton p2("roo", &d1);

    QDialog d2(&p1);
    QPushButton p3("goo", &d2);

    QObject::connect(&p1, &QPushButton::clicked, [&](){p2.setText("w00t!");});
    QObject::connect(&p2, &QPushButton::clicked, [&](){p1.setText("n00t!");});
    QObject::connect(&p3, &QPushButton::clicked, [&](){p1.setText("eh?"); p2.setText("meh!");});

    p1.resize(400, 400);
    p2.resize(200, 200);
    p3.resize(200, 200);

    p1.show();
    p2.show();
    p3.show();
    d1.show();
    d2.show();

    return a.exec();
}

据我所知,你所有的条件都得到了满足。