【问题标题】:qt: is my window overlapped by other?qt:我的窗口是否与其他窗口重叠?
【发布时间】:2010-12-05 11:51:15
【问题描述】:

我知道 WINAPI 中的一些解决方案,其中枚举所有可见窗口以检查与我的窗口相交...

但我需要 Qt 的跨平台解决方案(3 或 4 - 没有米特),也许有人可以帮助我吗?

谢谢。

【问题讨论】:

  • 我建议您更清楚地指定您的平台要求是什么。您想对所有运行 Qt 的平台执行此操作吗?

标签: winapi qt


【解决方案1】:

要简单地检查您的窗口是否处于活动状态/是否有键盘焦点,您可以检查 Qt::WindowState 是否为 Qt::WindowActive。


要检查您的窗口是否与其他窗口重叠/交叉(我认为这是您的问题),我只能考虑使用一些解决方法。

QWidget 类有一个函数QWidget::visibleRegion(),它返回一个QRegion。基本上这个区域是可以发生绘画事件的空间,这意味着这是没有被其他任何东西覆盖的空间。您可以检查该区域的大小是否与您的窗口大小大致匹配,以查看是否有任何空间被其他东西覆盖。

我没有对此进行测试,所以我不能告诉你它是否适用于你需要它工作的所有平台。

编辑:根据您的评论: 这是我在 qt 4.6 参考中找到的关于 visibleRegion() 的内容:

返回未被遮挡的区域,其中 绘画事件可能发生。对于可见 小部件,这是一个近似值 其他小部件未覆盖的区域。

因此,如果这个未被遮挡的区域的大小大约是您的窗口的大小,那么您的窗口不会被任何东西覆盖。

【讨论】:

  • "只检查 Qt::WindowActive" 不起作用,因为单击托盘图标将活动状态更改为非活动,并且 isWindowActive() 总是返回 false
  • 天哪,我忘了。也许我的第二个建议更适合您的要求。
  • visibleRegion() 总是(为什么?)返回窗口的整个区域并返回无效值,只有窗口被隐藏,所以......有什么想法吗?
猜你喜欢
  • 1970-01-01
  • 2013-02-18
  • 2011-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-15
  • 1970-01-01
  • 2014-08-07
相关资源
最近更新 更多