cthu Qt中mouseMoveEvent无效

转载 2016年06月01日 10:13:45

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


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


bool mouseTracking


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


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


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


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


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


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

相关文章推荐

QT类之事件mousePressEvent以及mouseMoveEvent

将一串文字(Label控件)可以随着手标的拖动而到指定位置,重写mousePressEvent函数以及mouseMoveEvent函数: 问题解决步骤(逻辑):           首先分析题目需...

Qt中mouseMoveEvent在MainWindow中使用

最近用Qt软件界面,需要用到mouseMoveEvent,研究了下,发现些问题,分享一下。         在Qt中要捕捉鼠标移动事件需要重写MouseMoveEvent,但是Mouse...

Qt中mouseMoveEvent和mousePressEvent实现鼠标滑动换label颜色

【转】Qt中mouseMoveEvent和mousePressEvent实现鼠标滑动换label颜色 2011-11-30 19:01 转载自 buptyoyo 最终编辑 buptyoy...

QT mouseMoveEvent事件(qmainwindow内追踪鼠标事件事件)

最近用Qt软件界面,需要用到mouseMoveEvent,研究了下,发现些问题,分享一下。         在Qt中要捕捉鼠标移动事件需要重写MouseMoveEvent,但是MouseMo...

Qt中Debug设置断点无效

今天刚装好了QT,我迫不亟待的先打开一个例子工程,编译(QT里面好像是叫构建),运行,嘿,效果出来了。 然后我想调试一下程序,就在源代码中打了几个断点(QT中打断点和VS2012是一样的...

关于嵌入式Qt字体大小设置无效的原因分析

在Qt官网上,Qt for Embedded Linux Fonts模块已经说的很清楚了,搞了好多天 Qt for Embedded Linux Fonts Qt for Embed...

Ogitor探索之代码分析(1)---OgreWidget::mouseMoveEvent;OgitorsRoot::OnMouseMove

在../qtOgitor/src/ogrewidget.cpp中定义的void OgreWidget::mouseMoveEvent(QMouseEvent *evt) 代...

将图像无效值设置为NAN

  • 2015年10月14日 10:57
  • 2KB
  • 下载

解决C# 绑定句柄无效错误.doc

  • 2013年06月07日 10:31
  • 102KB
  • 下载

SAP BW ODS无效字符自动处理程序【升级版】

参考上一篇  SAP BW ODS无效字符自动处理程序     之前的程序在后面的使用过程中发现了一些Bug,更重要的是ODS激活一遇到错误就自动退出,导致异常只会显示第一条,而实际情况可能会有好...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:cthu Qt中mouseMoveEvent无效
举报原因:
原因补充:

(最多只允许输入30个字)