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