无法在linux中取消设置Qt :: WindowStaysOnTopHint

时间:2017-03-17 12:02:51

标签: c++ linux qt

我的应用程序中有一些小部件必须对某些信号做出反应,以便更改“保持在最佳状态”标志。好吧,将它设置为最顶层已成功完成,但我无法删除此标志。我的应用程序非常大,所以我不能在这里发布所有代码。但是我在这些我的小部件的构造函数中有一些代码,它们演示了这个问题 - 它的行为与我的小部件完全相同。

所以,问题是:

  • 设置/取消设置标志并调用show()小部件“跳跃”一点点向上(对于它的标题高度)
  • “WindowStaysOnTopHint”已成功应用,但无法删除
  • 这样的行为只在Linux上,在Windows中一切都很好

我的代码,它演示了它(丑陋,但它演示了问题+它仅用于调试目的):

static QWidget* wgt = new QWidget();
static QPushButton* btn = new QPushButton(wgt);
static bool *top = new bool(true);
static QHBoxLayout *l = new QHBoxLayout(wgt);
l->addWidget((btn));
wgt->setLayout(l);
connect(btn, &QPushButton::clicked, [&](bool chk){
    if (*top) {
        wgt->setWindowFlags(wgt->windowFlags() | Qt::WindowStaysOnTopHint);
        *top = false;
    }
    else {
         wgt->setWindowFlags(wgt->windowFlags() & ~Qt::WindowStaysOnTopHint);
        *top = true;
    }
    wgt->show();
});
wgt->show();

UPD:我无法以Qt方式执行此操作,因此我使用 XLib

修复了此问题

0 个答案:

没有答案