在Qt中要捕捉鼠标移动事件需要重写MouseMoveEvent,但是MouseMoveEvent为了不太耗资源在默认状态下是要鼠标按下才能捕捉到。要想鼠标不按下时的移动也能捕捉到,需要setMouseTracking(true)。
- 如果鼠标跟踪失效(默认),当鼠标被移动的时候只有在至少一个鼠标按键被按下时,这个窗口部件才会接收鼠标移动事件。
- 如果鼠标跟踪生效,如果没有按键被按下,这个窗口部件也会接收鼠标移动事件。
如果在子类上响应鼠标事件,只会触发子类的mouseMoveEvent,根据C++继承和重载的原理,所以子类也要setMouseTracking(true); 所以如果你想响应鼠标事件的控件被某个父控件包含,则该控件及其父控件或容器也需要setMouseTracking(true)。
在Qt里,默认状态下重写MouseMoveEvent需鼠标按下才能捕捉移动事件。若要在鼠标不按下时也能捕捉,需使鼠标跟踪生效。若在子类响应鼠标事件,子类要setMouseTracking(true),若控件被父控件包含,该控件及其父控件也需设置。
544

被折叠的 条评论
为什么被折叠?



