qt:我的窗户是否与其他窗户重叠?

时间:2010-12-05 11:51:15

标签: winapi qt

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

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

感谢。

1 个答案:

答案 0 :(得分:0)

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


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

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

我没有对此进行测试,因此我无法告诉您它是否适用于您需要它的所有平台。

修改:根据您的评论: 这是我在关于visibleRegion()的qt 4.6参考中找到的:

  

返回未显眼的区域   油漆事件可能发生。对于可见   小部件,这是近似的   其他小部件未覆盖的区域。

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