QWidget是在我的应用程序中运行一段时间后创建的。我启动我的应用程序。然后我使用互联网浏览器。在Linux上,我的新部件出现在我的浏览器上,但在Windows上--不是。小部件具有父小部件。如何在Linux上修复它?
我的父母和我的小工具都只有setFocusPolicy(Qt::StrongFocus);,Linux操作系统是OS Xubuntu。父类有一个不同之处:
#if defined(Q_WS_X11)
setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint);
#else
setWindowFlags(Qt::Window | Qt::FramelessWindowHint);
#endif发布于 2014-01-23 16:38:13
我相信Windows会阻止其他程序抢走焦点,而其他操作系统可能不会强制执行这一点。
创建小部件时,应在使其可见之前设置window state。例如
QWidget* lateWidget = new QWidget(this); // or add to layout or whatever
lateWidget->setWindowState(this->windowState());
lateWidget->show();编辑:
From the docs:
恰好被屏幕上的其他窗口遮挡的小部件被认为是可见的
这意味着如果你在parent之上打开浏览器,那么lateWidget->show()会要求窗口系统被激活。lateWidget,然后在顶部弹出并获得用户的鼠标和键盘焦点。
在展示lateWidget之前,一个快速修复方法是使用
lateWidget->setAttribute(Qt::WA_ShowWithoutActivating);https://stackoverflow.com/questions/21301173
复制相似问题