问:鼠标事件处理程序可以相互阻塞吗?

时间:2012-04-05 18:11:24

标签: qt event-handling

我有一个简单的父窗口小部件,可以重新实现mousePressEvent / mouseReleaseEvent。父级的子小部件使用enterEvent / leaveEvent。当我将鼠标悬停在子窗口小部件上时,执行leaveEvent / enterEvent,但是当我单击并按住鼠标时,执行mousePressEvent,但是enterEvent / leaveEvent变为静音(换句话说,没有单击并拖动)。关于可能导致这种情况的任何想法?

1 个答案:

答案 0 :(得分:4)

如果您按住窗口小部件上的鼠标按钮,那么该窗口小部件抓取鼠标事件,直到您释放按钮。这不是Qt的特殊功能,您可以在我知道的每个其他GUI API中找到类似的行为。

看一下Qt文档的相关部分:

QWidget / Events

  

在按下鼠标按钮时调用mousePressEvent()   鼠标光标位于窗口小部件内部,或者当窗口小部件抓取时   鼠标使用grabMouse()。 按下鼠标而不释放它   实际上与调用grabMouse()相同。

void QWidget::grabMouse ()

  

抓取鼠标输入。此小部件接收所有鼠标事件,直到   调用releaseMouse(); 其他小部件根本没有鼠标事件