Qt中mouseMoveEvent无效

最近用Qt软件界面,须要用到mouseMoveEvent,研究了下,发现些问题,分享一下。 .net

在Qt中要捕捉鼠标移动事件须要重写MouseMoveEvent,可是MouseMoveEvent为了避免太耗资源在默认状态下是要鼠标按下才能捕捉到。要想鼠标不按下时的移动也能捕捉到,须要setMouseTracking(true) blog

bool mouseTracking

这个属性保存的是窗口部件跟踪鼠标是否生效 继承

若是鼠标跟踪失效(默认),当鼠标被移动的时候只有在至少一个鼠标按键被按下时,这个窗口部件才会接收鼠标移动事件 事件

若是鼠标跟踪生效,若是没有按键被按下,这个窗口部件也会接收鼠标移动事件。 资源

QWidget中使用是没有问题的,可是,对于QMainWindow即便使用了setMouseTracking(true)依然没法捕捉到鼠标没有按下的移动,只有在鼠标按下是才能捕捉。 get

解决办法:要先把QMainWindow的CentrolWidget使用setMouseTracking(true)开启移动监视。而后再把QMainWindow的setMouseTracking(true)开启监视。以后就一切正常了。 it

缘由:CentrolWidget是QMainWindow的子类,你若是在子类上响应鼠标事件,只会触发子类的mouseMoveEvent,根据C++继承和重载的原理,因此子类也要setMouseTracking(true); 因此若是你想响应鼠标事件的控件被某个父控件包含,则该控件及其父控件或容器也须要setMouseTracking(true); 容器

 

转载地址:http://blog.csdn.net/hcj116/article/details/17334473原理

相关文章
相关标签/搜索