首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >QWidget在Windows和Linux上的不同行为

QWidget在Windows和Linux上的不同行为
EN

Stack Overflow用户
提问于 2014-01-23 14:43:29
回答 1查看 481关注 0票数 1

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

我的父母和我的小工具都只有setFocusPolicy(Qt::StrongFocus);,Linux操作系统是OS Xubuntu。父类有一个不同之处:

代码语言:javascript
复制
#if defined(Q_WS_X11) 
   setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint); 
#else 
   setWindowFlags(Qt::Window | Qt::FramelessWindowHint); 
#endif
EN

回答 1

Stack Overflow用户

发布于 2014-01-23 16:38:13

我相信Windows会阻止其他程序抢走焦点,而其他操作系统可能不会强制执行这一点。

创建小部件时,应在使其可见之前设置window state。例如

代码语言:javascript
复制
 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之前,一个快速修复方法是使用

代码语言:javascript
复制
 lateWidget->setAttribute(Qt::WA_ShowWithoutActivating);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21301173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档