Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在我的小部件窗口外接收或处理mouseMoveEvent?_C++_Qt_Events_Mouse - Fatal编程技术网

C++ 如何在我的小部件窗口外接收或处理mouseMoveEvent?

C++ 如何在我的小部件窗口外接收或处理mouseMoveEvent?,c++,qt,events,mouse,C++,Qt,Events,Mouse,我正在编写Qt应用程序,每当鼠标移动到屏幕上的某个区域时,它会播放淡入动画,每当鼠标移出同一区域时,它会播放淡出动画 我已经在stack overflow中发现了一个类似的问题,但是,它并没有完全回答我的问题 如果我在应用程序中安装了一个事件过滤器,我是否能够看到应用程序中的所有事件,即使它在我的小部件窗口之外 如果没有,我知道另一种方法是在leaveEvent的重新实现中使用QWidget::grabMouse。但如果我这样做,我是否能够与我的应用程序之外的任何东西进行交互 编辑:虽然我使用的

我正在编写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。你的回答很有帮助。谢谢。不幸的是,我刚刚做了这个账目,我还不能投票支持。很抱歉