【Qt教程】3.1 - Qt5 event事件、Label控件的鼠标事件捕获
1. event简介
事件(event)是由系统或者Qt本身在不同的时刻发出的。当用户按下鼠标、敲下键盘,或者是窗口需要重新绘制的时候,都会发出一个相应的事件。一些事件在对用户操作做出响应时发出,如键盘事件等。另一些事件则是由系统自动发出,如计时器事件。
当事件发生时,Qt将创建一个事件对象。Qt中所有的事件类都继承于QEvent。在事件对象创建完毕后,Qt将这个事件对象传递给QObject的event()函数。event()函数并不直接处理事件,而是按照事件对象的类型分派给特定的事件处理函数(event handler)
帮助手册,搜索QEvent。查看Type。
这里面包含许多事件,我们以鼠标的事件为例,鼠标事件全部继承于QMouseEvent类。
再去找enterEvent,类型为虚函数,所以可以被重写,来实现事件的回调处理。
2. Event示例 - enterEvent、leaveEvent
- GitHub源码仓库:QT学习例程
- 示例:新建一个label,鼠标进入/退出会触发事件,用户对捕获的事件进行打印处理。
新建widget工程。拖入Label控件。
为方便观察,添加上边框,右下角属性,QFrame,frameShape,选择Box。
因为我们要对原有的Label功能做一些改动,添加事件处理,属于自定义控件。
但由于这个控件的外观没什么变化,所以不需要重新创建控件,只需创建类。
添加自定义控件:
工程 , Add New... , C++ , C++ Class,填入控件名称myLabel,基类选择QWidget,下一步,完成。
之后就完成了新建一个类,多出了myLabel.c与myLabel.h。
对 [virtual protected] void QWidget::enterEvent(QEvent *event)进行重写。
.h文件中声明函数名称,.cpp文件中实现函数。virtual可加可不加,.h中不要有作用域。
自定义控件由于创建的时候继承的是QWidget,而我们调用的控件为Label。所以将继承的父类修改为为 QLabel。
回到UI,选择刚刚拖入的Label控件,右键,提升为,myLabel,添加,提升。
- 运行,实验现象:
3. 其他鼠标事件 - 移动mouseMoveEvent
除此之外,Label中还有很多事件可以重写:红框框中的是Label中鼠标的事件。
重写后,实验现象:(注意:移动必须要在鼠标按下时才能触发,可以通过更改属性修改为放置就会触发)
4. 其他鼠标事件 - 获取鼠标坐标位置
如果我们要获取鼠标的xy坐标:对应这几个参数。
x/y():鼠标相对于控件的坐标像素。
globalX/globalY():鼠标相对于整个屏幕的坐标像素。
打印鼠标坐标:
- Qt的格式化字符串:
QString str = QString("鼠标按下了 x=%1 y=%2").arg(ev->x()).arg(ev->y());
5. 其他鼠标事件 - 限定鼠标左键触发/无条件触发
以上的显示鼠标移动,左键可以触发,右键、中键同样也可以触发。如果只想获取左键按下事件,需要对event的鼠标输入参数 QMouseEvent进行选择。
Qt::MouseButton的枚举值
如果想限定鼠标左键按下,需要限定事件,由 ev->button() 改为 ev->buttons(),并且事件要 &而不是 ==
由于鼠标移动事件是默认需要鼠标按下的。如需要不按下,通过代码在构造函数中设置鼠标追踪属性。
setMouseTracking(true);
GitHub源码仓库:QT学习例程
视频P31,这节内容比较多有些杂。
【Qt教程】3.1 - Qt5 event事件、Label控件的鼠标事件捕获相关推荐
- vb检测html事件,VB代码VB小程序:捕获 WebBrowser 控件的鼠标事件
49. 捕获 WebBrowser 控件的鼠标事件 VB 的网页浏览控件 WebBrowser 没有 MouseDown.MouseMove.MouseUp 等鼠标事件,要在程序中捕获这些事件,必须另 ...
- Qt给控件添加鼠标事件
处理控件上的鼠标事件,是做界面人机交互经常需要的,本文做一个使用的总结.本文在QLable控件中实验过. 一.在h文件中声明鼠标响应事件处理函数 public:explicit MainWindow( ...
- 从零开始学_JavaScript_系列(九)——dojo(2)(AJAX、时间控件、鼠标事件、样式修改、事件移除、消息发布订阅)
如果没有接触过dojo,建议阅读: http://blog.csdn.net/qq20004604/article/details/51028702 里面介绍了如何加载dojo. 关于dojo的下载, ...
- AspxCallBack控件的CallBack事件
AspxCallBack控件的CallBack事件 AspxCallBack控件的CallBack事件 1)不能弹出窗口: 2)取AspxDropDownList控件客户端的值使用 ddl.Clien ...
- Python Tkinter教程(二)——Label控件、Frame控件、Button控件的完整参数和所有方法及详细用法
>>>[上节回顾:tkinter编程基本步骤.窗口基本属性及Toplevel控件的使用]<<< Python Tkinter教程(二) 这篇博客将详 ...
- QT mouseMoveEvent事件(qmainwindow内追踪鼠标事件事件)
最近用Qt软件界面,需要用到mouseMoveEvent,研究了下,发现些问题,分享一下. 在Qt中要捕捉鼠标移动事件需要重写MouseMoveEvent,但是MouseMoveEvent为了不太耗资 ...
- qt界面中禁用某个控件的鼠标滑轮事件
主要思想就是:当进入滑轮的滚动事件的时候,就禁用该控件,而进入鼠标点击事件的时候,就将这个控件进行激活 如:spinBox控件,鼠标的过滤事件可以参考博客:https://blog.csdn.net/ ...
- 事件冒泡控件示例(转载)
.NET Framework 开发员指南 事件冒泡 ASP.NET 页框架提供一种称为"事件冒泡"的技术,允许子控件将事件沿其包容层次结构向上传播.事件冒泡允许在控件层次结构中 ...
- Qt小程序之QQ登录窗口输入框控件
一.简述 在前面的文章里为大家展示了用Qt实现的QQ登录界面以及QQ窗口的右键菜单控件,(Qt 实现 QQ 9.0版 自定义菜单控件.以及Qt 实现 QQ 9.0 新版登录窗口),有兴趣的小伙伴可以看 ...
最新文章
- [Groovy] Groovy API
- MVC案例——模糊查询
- 关于ORACLEOraDb11g_home1TNSListener服务启动后又停止问题的关键点
- Attention模型:我的注意力跟你们人类不一样
- aws s3 獲取所有文件_通过Java上传下载AWS S3文件,并解决文件数量超过1000的问题...
- 5、扩展骨架文件内容
- 如何监视SQL Server索引的总大小
- 微软公开PrintNightmare系列第3枚无补丁0day,谷歌修复第8枚已遭利用0day
- win11能否安装cad Windows11安装cad的解决方法
- LIRE的使用:搜索相似的图片
- Redhat Linux Enterprise Server 5.5 x86_64位操作系统Karachi时区问题?
- 使用sourcetree 的git flow
- mysql 转字符串 blob_BLOB转换为字符串或图像/ PHP或SQL
- 中国电网计算机面试题目,国家电网面试经验
- 助力公共事业服务,RPA大显身手
- background-position切图
- android平板投屏,安卓手机投屏到平板
- [ZT]完全用Linux工作,摈弃Windows
- 熬夜肝出囊括Java后端95%的面试题解析
- python对数正态分布函数_Python对数正态分布函数,python,中,的
热门文章
- bzoj1577 [Usaco2009 Feb]庙会捷运Fair Shuttle
- [Luogu P2387] [NOI2014]魔法森林 (LCT维护边权)
- (转)VC++多线程编程
- Python知识点汇总
- TB创建公式应用dll失败 请检查用户权限,终极解决方案
- c语言字符数组的应用编程,C语言基础(一)
- 数据仓库、数据集市、数据湖、数据中台到底有什么区别?
- Python+BI爬取3000条车厘子数据,发现了这些秘密
- python os库
- 阿里云mysql写入性能_如何评价阿里云新一代关系型数据库 PolarDB?