Qt鼠标离开事件,而按下按钮

Qt mouse leave event while button is pressed

本文关键字:按钮 鼠标 离开 事件 Qt      更新时间:2023-10-16

我需要检测鼠标指针是否离开了我的自定义小部件,即使按下了鼠标按钮。

根据这篇文章,Qt在按下按钮时不会导致leaveEvent,至少在4.4版本中不会。我正在使用4.7.3,但在所描述的情况下仍然没有得到leaveEvent。我还尝试了各种与拖拽相关的项目,但运气不好。有人知道怎么处理这个吗?

实际上有一个比使用父小部件的鼠标事件更好的选择:您可以实现子小部件的mouseMoveEvent函数并获得相对于小部件左上角的QMouseEvent::pos()位置。这意味着,如果您知道小部件的大小(例如使用QWidget::rect()),您可以在小部件内计算鼠标指针是否仍在小部件上,而无需更改父小部件。

我对@gregseth做了类似的事情。

编写自己的MouseLeaveEvent,从MouseMoveEvent中调用当鼠标的位置在小部件的边界之外时。

正如Qt的文档所说"鼠标移动事件只会在按下鼠标按钮时发生"

我遇到了同样的问题。我发现的唯一解决方法是管理父小部件的mouseMove事件,并检查光标的位置是在您希望发生事件的小部件的边界内还是外。