enterEvent 和 leaveEvent 响应鼠标进入窗口范围和离开窗口范围的情况,但是有时会失去响应。不知道是什么原因。
例如,在 Qt 自带的例子程序 Shaped Clock 中,加入如下函数:
void ShapedClock::enterEvent(QEvent*e)
{
qDebug() << "enterEvent";
}
void ShapedClock::leaveEvent(QEvent*e)
{
qDebug() << "leaveEvent";
}
编译运行,Qt Creator 的 Application Output 窗口会在鼠标进出表盘范围内时输出相应的信息。
但是,这个 Shaped Clock 例子提供了右键菜单,右键呼出菜单以后,左键点击窗口(表盘)的其他位置,取消菜单,之后,enterEvent 和 leaveEvent 就完全没有响应了,不管鼠标怎么移动。
当然,如果鼠标多在表盘上停留一会儿,等 tooltip 出现,就可以再次触发 enterEvent。但如果把程序中的 tooltip 去掉,那么只有再次呼出右键菜单,然后切换窗口,才能让 enterEvent 重新响应。
上面说得可能有点乱。简单来说,右键菜单在取消后应该是被隐藏了吧?那么这个隐藏的右键菜单为什么能“屏蔽”掉整个窗口的 enterEvent 和 leaveEvent 呢?如何解决这个问题?