Windows和Linux上的不同QWidget行为

时间:2014-01-23 06:43:29

标签: linux qt qwidget

QWidget是在我的应用程序中创建一段时间后创建的。我开始我的应用程序。然后我使用互联网浏览器。在Linux上,我的新小部件出现在我的浏览器上,但在Windows上 - 不是。小部件有父小部件。如何在Linux上修复它?

父节点和我的小部件都只有setFocusPolicy(Qt::StrongFocus); Linux操作系统是Xubuntu。父类中的一个区别是:

#if defined(Q_WS_X11) 
   setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint); 
#else 
   setWindowFlags(Qt::Window | Qt::FramelessWindowHint); 
#endif

1 个答案:

答案 0 :(得分:0)

我相信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);