Qt中mouseMoveEvent在MainWindow中使用
在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);
ui->centralWidget->setMouseTracking(true);
setMouseTracking(true); //这是激活整个窗体的鼠标追踪
ui->pBtnMenu->setMouseTracking(true); //进入某个按钮时,鼠标追踪属性失效,因此我们也需要激活该按钮的鼠标追踪功能
ui->pBtnTest->setMouseTracking(true);
//然后再实现mouseMoveEvent()事件
void MainWindow::mouseMoveEvent(QMouseEvent *e)
{
qDebug()<<"mouse move ";
e->accept();
if(enterBtn(e->pos(),ui->pBtnMenu))
//Qlab_context->setText("这是第一个按钮");
qDebug()<<"menu";
if(enterBtn(e->pos(),ui->pBtnTest))
qDebug()<<"test";
//Qlab_context->setText("这是第二个按钮");
}
//这里我使用另一个函数来完成判断鼠标是否在一个按钮区域内,如果在区域内只返回真,否则返回假
bool MainWindow::enterBtn(QPoint pp, QPushButton *btn)
{
int height = btn->height();
int width = btn->width();
QPoint btnMinPos = btn->pos();
QPoint btnMaxPos = btn->pos();
btnMaxPos.setX(btn->pos().x()+width);
btnMaxPos.setY(btn->pos().y()+height);
if(pp.x() >= btnMinPos.x() && pp.y() >= btnMinPos.y()
&& pp.x() <= btnMaxPos.x() && pp.y() <= btnMaxPos.y())
return true;
else
return false;
}
Qt中mouseMoveEvent在MainWindow中使用相关推荐
- Qt中mouseMoveEvent(QmouseEvent *event)使用探讨
Qt中mouseMoveEvent(QmouseEvent *event)使用探讨 在学习网络教程过程中,尝试使用Qpainter制作一个涂鸦板,需要使用QmouseEvent ,按照教程,涂鸦板不能 ...
- 【Qt】Qt学习笔记(更新中)
文章目录 0x00 前言 0x01 Qt简介 1.1 Qt是什么 1.2 Qt发展史 1.3 Qt支持的平台 1.4 使用Qt开发的软件 1.5 Qt的优点 1.6 其它 0x02 创建Qt项目 2. ...
- Qt的日常编程过程中遇见的问题和使用
Qt的日常编程过程中遇见的问题和注意 Qt的日常编程过程中遇见的问题 1.QString和String的转化的格式问题,中文转化过程中会出现问题. 2.使用qcustomplot的时候出现错误:LIN ...
- 在Qt for Python应用程序中使用Designer UI文件
在Qt for Python应用程序中使用Designer UI文件 在Qt for Python应用程序中使用Designer UI文件 将表单转换为Python代码 UiTools方法 在Qt f ...
- Qt Creator在问题窗格中显示任务列表文件
Qt Creator在问题窗格中显示任务列表文件 在问题窗格中显示任务列表文件 管理任务列表条目 任务列表文件格式 在问题窗格中显示任务列表文件 您可以使用代码扫描和分析工具来检查源代码.这些工具报告 ...
- Qt Creator在3D编辑器中工作
Qt Creator在3D编辑器中工作 在3D编辑器中工作 控制3D编辑器相机 使用全局和局部方向 使用编辑灯 选择项目 移动项目 旋转项目 缩放项目 在3D编辑器中工作 编辑3D场景时,可以在3D编 ...
- Qt学习之安装过程中各种问题的解决
Qt的安装之路真的坎坷,也许是我电脑太难了吧,不过,还是在不断尝试中一个一个解决了全部问题,下面就来看看Qt安装过程中这些问题到底要怎么解决吧. 这里写目录标题 版本选择 问题一--win10系统Qt ...
- Qt QImage scaled方法缩放中的问题
最近在某些测试中发现,QImage 先按照一定的比例进行缩放,在对QImage对象进行绘制等操作后,使用以下的方式将其恢复到其原来的尺寸. 为了后面在可能在绘制的过程中让成员变量尽量的少,我定义了一个 ...
- QT中QDatetime中文系统中获取英文系统的结果
QT中QDatetime中文系统中获取英文系统的结果 如需转载请标明出处:http://blog.csdn.net/itas109 QQ技术交流群:129518033 我们在中文系统下开发QT程序,如 ...
- Qt(C++)项目中使用 Basler 工业相机(1)
Qt(C++)项目中使用 Basler 工业相机(1 枚举相机) 最近的一个项目中用到Basler 的GigE 接口的工业相机.为此花了好几天时间研究了pylon 的用法.本文就是学习过程中做的笔记. ...
最新文章
- 阿里云LinkIOTEdge物理边缘计算流程
- 乐Phone:还原联想的联想
- [PHP] 现代化PHP之路:composer的镜像站设置
- vector作为参数传递到dll问题
- sed 第n行后加入_【高新课堂】第一百三十九期Liunx运维17个实用技巧
- 面试分享系列 | 17道Python面试题,让你在求职中无往不利
- d3d9 抓取windows屏幕
- memcached一致性哈希及php客户端实现
- ubuntu 10.10下面添加samba实现和windows共享文件
- Atitit node.js的缺点 优缺点 和php比较 1. 门槛比较 php简单,node麻烦	1 1.1. php的优势是语法简单易学,学习曲线平滑度可能居所有语言之首	2 1.2. 当用N
- c++股票数据接口逻辑是什么
- NS3:FlowMonitor设计讲解
- 牢记公式,ardupilot EKF2就是纸老虎(五)!
- 张小平,海底捞,比特大陆
- Microsoft Sync Framework Runtime 简介(一篇非常好的MSF介绍文章)
- python如何抓取图片数据_python 的简单抓取图片
- 乡愁!根之所在,情之所系!
- Java网络爬虫基础概述
- Intellij IDEA中push代码到github中引发的部分报错 解决思路
- 赛尔号找不到服务器ip,赛尔号互通版
热门文章
- 六步学会github入门使用
- 远程控制计算机显示为什么不能满屏,win7远程桌面不能全屏显示怎么办-处理win7远程桌面不能全屏显示的方法 - 河东软件园...
- 做问卷调查最基本的注意事项
- 传言阿里P10赵海平,被P11多隆判定3.25离职,如何评价阿里 P10 赵海平对王垠的面试?
- 关于IllegalArgumentException occurred while calling setter for property
- 在谷歌搜索框内不显示搜索记录
- scratch经典游戏主题源码分享,包含了20多款经典游戏
- PCB贴片元器件手工焊接技巧及要点
- C/C++ C语言定义结构体的几种方法
- ONVIF系列——海康摄像头设置onvif协议开启