C++ 如何在我的小部件窗口外接收或处理mouseMoveEvent?
我正在编写Qt应用程序,每当鼠标移动到屏幕上的某个区域时,它会播放淡入动画,每当鼠标移出同一区域时,它会播放淡出动画 我已经在stack overflow中发现了一个类似的问题,但是,它并没有完全回答我的问题 如果我在应用程序中安装了一个事件过滤器,我是否能够看到应用程序中的所有事件,即使它在我的小部件窗口之外 如果没有,我知道另一种方法是在leaveEvent的重新实现中使用QWidget::grabMouse。但如果我这样做,我是否能够与我的应用程序之外的任何东西进行交互C++ 如何在我的小部件窗口外接收或处理mouseMoveEvent?,c++,qt,events,mouse,C++,Qt,Events,Mouse,我正在编写Qt应用程序,每当鼠标移动到屏幕上的某个区域时,它会播放淡入动画,每当鼠标移出同一区域时,它会播放淡出动画 我已经在stack overflow中发现了一个类似的问题,但是,它并没有完全回答我的问题 如果我在应用程序中安装了一个事件过滤器,我是否能够看到应用程序中的所有事件,即使它在我的小部件窗口之外 如果没有,我知道另一种方法是在leaveEvent的重新实现中使用QWidget::grabMouse。但如果我这样做,我是否能够与我的应用程序之外的任何东西进行交互 编辑:虽然我使用的
编辑:虽然我使用的是Qt库,但我的应用程序只用于部署到Windows。我很肯定答案是否定的,因为小部件之外的事件由OSs窗口管理器处理,并传播到该空间中的任何应用程序
然而,通过调用QCursor::pos,您可以在屏幕上的任何位置获得鼠标位置,您可以定期轮询鼠标位置。我相当肯定答案是否定的,因为您的小部件之外的事件由OSs窗口管理器处理,并传播到该空间中的任何应用程序
但是,您可以通过调用QCursor::pos在屏幕上的任何位置获取鼠标位置,您可以定期轮询鼠标位置。如果您在Windows上,您可以创建一个对话框,以便在鼠标指针将鼠标消息发送到窗口之前立即接收鼠标消息。不幸的是,我不知道其他操作系统中是否存在此功能。如果您在Windows上,您可以创建一个新的操作系统,以便在鼠标指针将鼠标消息发送到窗口之前立即接收鼠标消息。不幸的是,我不知道其他操作系统中是否存在此功能。您可以尝试创建一个完全透明的窗口,该窗口位于您希望接收鼠标事件的区域的顶部,带有Qt::WindowStaysOnTopHint、Qt::FramelessWindowHint和Qt::ToolTip标志。最后一个标志可能会阻止窗口接收焦点,Qt::WA_TranslucentBackground属性和鼠标跟踪已启用。您可以尝试创建一个完全透明的窗口,该窗口位于您希望接收鼠标事件的区域顶部,并使用Qt::WindowStaysOnTopHint,Qt::FramelessWindowHint和Qt::ToolTip标志最后一个可能会阻止窗口接收焦点、Qt::WA_transparcentbackground属性和启用鼠标跟踪。我明白了,有什么有效的方法可以做到这一点?我应该只使用QObject::startTimer和重新实现timerEvent吗?或者使用QTimer并将其超时信号连接到插槽?我还没有使用QObject::startTimer,所以我无法回答这个问题-尽管我认为这两个选项都是等效的。我认为在这个阶段找到一个平衡的时间间隔将更加重要。我明白了,什么是一个有效的方法?我应该只使用QObject::startTimer和重新实现timerEvent吗?或者使用QTimer并将其超时信号连接到插槽?我还没有使用QObject::startTimer,所以我无法回答这个问题-尽管我认为这两个选项都是等效的。我认为在这个阶段找到一个平衡的时间间隔将更为重要。在这里的其他回复中,你能澄清你的应用程序是跨平台的,还是特定于某个操作系统吗?在这里的其他回复中,你能澄清你的应用程序是跨平台的,还是特定于某个操作系统吗?哇,我没想到,你真有创意。谢谢你的回答,我会试试的。哇,我没想到,你真有创意。谢谢你的回答,我会试试的。虽然我使用的是Qt库,但我的应用程序只用于部署到windows。你的回答很有帮助。谢谢。不幸的是,我刚刚做了这个账目,我还不能投票支持。抱歉。虽然我正在使用Qt库,但我的应用程序仅用于部署到windows。你的回答很有帮助。谢谢。不幸的是,我刚刚做了这个账目,我还不能投票支持。很抱歉