我正在开发Qt应用程序。在其中,我有一个QMainWindow和一个QWidget,它们可以独立显示且不属于窗口。
我想实现的是,如果我点击那个QWidget,窗口就不会跑到前面。也就是说,如果它在另一个应用程序的后面,它就应该保持原样。
我创建了一个测试应用:
main.cpp
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MainWindow w;
w.show();
Widget mywidget;
return app.exec();
}
Widget.cpp
namespace
{
Qt::WindowFlags defaultWindowFlags()
{
Qt::WindowFlags f = 0;
f |= Qt::X11BypassWindowManagerHint;
f |= Qt::FramelessWindowHint;
f |= Qt::WindowStaysOnTopHint;
f |= Qt::CustomizeWindowHint;
f |= Qt::WindowDoesNotAcceptFocus;
f |= Qt::Window;
return f;
}
}
Widget::Widget(QWidget *parent) : QWidget(parent, defaultWindowFlags())
{
setFixedSize(100,100);
setStyleSheet("background-color:blue;");
move(56,89);
setVisible(true);
}
QDialog
(以主窗口为父窗口)始终位于主窗口顶部,并在单击时将主窗口置于前台。一个非短暂的QDialog
(没有父窗口)是一个独立的窗口。单击它会将其置于顶部,而不改变主窗口的当前堆叠级别。我看到你也构建了没有父窗口的Widget mywidget;
。所以,你可能不在Windows上(在那里它应该可以工作)。(f |= Qt::X11BypassWindowManagerHint;
让我更加相信这一点。) 我猜这可能与你特定的窗口管理器有关... - Scheff's Cat