Windows和Linux上的不同Qwidget行为



qwidget是在我的应用中创建的。我启动我的应用程序。然后我使用Internet浏览器。在Linux上,我的新小部件出现在我的浏览器上,但在Windows上 - 不是。小部件具有父窗口小部件。如何在Linux上修复?

parent和我的小部件都只有 setFocusPolicy(Qt::StrongFocus); linux OS是xubuntu。父母类别的一个差异:

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

我相信Windows可以防止其他程序窃取焦点,而某些其他操作系统可能无法强制执行。

创建小部件时,应在使其可见之前设置窗口状态。例如

 QWidget* lateWidget = new QWidget(this); // or add to layout or whatever
 lateWidget->setWindowState(this->windowState());
 lateWidget->show();

编辑:

来自文档:

一个恰好被屏幕上其他窗口遮盖的小部件是 被认为是可见的

这意味着,如果您在parent的顶部打开浏览器,则lateWidget->show()会要求窗口系统被激活。lateWidget然后弹出顶部并获得用户鼠标和键盘焦点。

在显示lateWidget之前,快速修复是使用

 lateWidget->setAttribute(Qt::WA_ShowWithoutActivating);

相关内容

  • 没有找到相关文章

最新更新