描述
一般来讲,我们希望实现在mouseMoveEvent中获取当前鼠标的位置,以触发一些自定义的鼠标hover特效。在这种情形下需要启动mouse tacking才能达到效果,原因是mouseMoveEvent默认是在鼠标按下后才会触发。>> QWidget::mouseMoveEvent | Qt Document
但是也有一些特殊情况,看上去我们已经启用了mouse tacking,但实际上并没有效果。
这是笔者碰到的一种情况,在QMainWindow中启用mouse tacking,但没有任何效果。
主要原因是由于QtDesigner生成的QMainWindow中centralWidget并没有设置相关的mouseMoveEvent, 同时mouseMoveEvent又被centralWidget接受了。
最好的解决办法还是直接在QWidget中使用,或者将QMainWindow的centralWidget取出来再加上相应的鼠标事件的监听。
参考链接
QMainWindow not tracking mouse with setMouseTracking() | StackOverflow