【发布时间】:2010-12-05 11:51:15
【问题描述】:
我知道 WINAPI 中的一些解决方案,其中枚举所有可见窗口以检查与我的窗口相交...
但我需要 Qt 的跨平台解决方案(3 或 4 - 没有米特),也许有人可以帮助我吗?
谢谢。
【问题讨论】:
-
我建议您更清楚地指定您的平台要求是什么。您想对所有运行 Qt 的平台执行此操作吗?
我知道 WINAPI 中的一些解决方案,其中枚举所有可见窗口以检查与我的窗口相交...
但我需要 Qt 的跨平台解决方案(3 或 4 - 没有米特),也许有人可以帮助我吗?
谢谢。
【问题讨论】:
要简单地检查您的窗口是否处于活动状态/是否有键盘焦点,您可以检查 Qt::WindowState 是否为 Qt::WindowActive。
要检查您的窗口是否与其他窗口重叠/交叉(我认为这是您的问题),我只能考虑使用一些解决方法。
QWidget 类有一个函数QWidget::visibleRegion(),它返回一个QRegion。基本上这个区域是可以发生绘画事件的空间,这意味着这是没有被其他任何东西覆盖的空间。您可以检查该区域的大小是否与您的窗口大小大致匹配,以查看是否有任何空间被其他东西覆盖。
我没有对此进行测试,所以我不能告诉你它是否适用于你需要它工作的所有平台。
编辑:根据您的评论:
这是我在 qt 4.6 参考中找到的关于 visibleRegion() 的内容:
返回未被遮挡的区域,其中 绘画事件可能发生。对于可见 小部件,这是一个近似值 其他小部件未覆盖的区域。
因此,如果这个未被遮挡的区域的大小大约是您的窗口的大小,那么您的窗口不会被任何东西覆盖。
【讨论】: