我正在编写Qt应用程序,当鼠标移动到屏幕中的某个区域时,它会播放淡入动画,并且只要鼠标移出相同区域,就会播放淡出动画。
我已经在堆栈溢出中找到了类似的问题,但是,它并没有完全回答我的问题。 (similar question here)
如果我在应用程序中安装了一个事件过滤器,即使它在我的窗口小部件窗口之外,我是否能够看到应用程序中的所有事件?
如果没有,我知道在leaveEvent()的重新实现中有一个涉及QWidget :: grabMouse()的替代方法。但如果我这样做,我能否与我的应用程序外的任何东西进行交互?
编辑:虽然我使用的是Qt库,但我的应用程序仅用于部署到Windows。
答案 0 :(得分:3)
我确定答案是肯定的,因为你的小部件之外的事件是由操作系统窗口管理器处理的(并传播到该空间中的任何应用程序上)。
但是,您可以通过调用QCursor::pos()
在屏幕上的任何位置获取鼠标位置,您可以定期轮询以找出鼠标的位置。
答案 1 :(得分:2)
您可以尝试创建一个完全透明的窗口,该窗口位于您要接收鼠标事件的区域的顶部,并带有Qt::WindowStaysOnTopHint
,Qt::FramelessWindowHint
和Qt::ToolTip
标记(最后一个)可能会阻止窗口接收焦点),Qt::WA_TranslucentBackground
属性和鼠标跟踪已启用。
答案 2 :(得分:1)
如果您使用的是Windows,则可以创建global hook来接收每条鼠标消息(在鼠标指针下发送到窗口之前)。不幸的是,我不知道其他操作系统中是否存在此功能。