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

最佳答案

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

10-08 02:09