博客
关于我
【Qt教程】3.1 - Qt5 event事件、Label控件的鼠标事件捕获
阅读量:358 次
发布时间:2019-03-04

本文共 1523 字,大约阅读时间需要 5 分钟。

1. event简介

事件(event)是由系统或者Qt本身在不同的时刻发出的。当用户按下鼠标、敲下键盘,或者是窗口需要重新绘制的时候,都会发出一个相应的事件。一些事件在对用户操作做出响应时发出,如键盘事件等。另一些事件则是由系统自动发出,如计时器事件。

当事件发生时,Qt将创建一个事件对象。Qt中所有的事件类都继承于QEvent。在事件对象创建完毕后,Qt将这个事件对象传递给QObject的event()函数。event()函数并不直接处理事件,而是按照事件对象的类型分派给特定的事件处理函数(event handler)

 

帮助手册,搜索QEvent。查看Type。

 

这里面包含许多事件,我们以鼠标的事件为例,鼠标事件全部继承于QMouseEvent类。

 

再去找enterEvent,类型为虚函数,所以可以被重写,来实现事件的回调处理。

 

2. Event示例 - enterEvent、leaveEvent

  • GitHub源码仓库:
  • 示例:新建一个label,鼠标进入/退出会触发事件,用户对捕获的事件进行打印处理。

新建widget工程。拖入Label控件。

 

为方便观察,添加上边框,右下角属性,QFrame,frameShape,选择Box。

 

因为我们要对原有的Label功能做一些改动,添加事件处理,属于自定义控件。

但由于这个控件的外观没什么变化,所以不需要重新创建控件,只需创建类。

 

添加自定义控件:

工程 , Add New... , C++ , C++ Class,填入控件名称myLabel,基类选择QWidget,下一步,完成。

之后就完成了新建一个类,多出了myLabel.c与myLabel.h。

对 [virtual protected] void QWidget::enterEvent( *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源码仓库:​​​​​​​

视频P31,这节内容比较多有些杂。

转载地址:http://gsqe.baihongyu.com/

你可能感兴趣的文章
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表或全表增量同步_实现指定整库同步_或指定数据表同步配置_04---大数据之Nifi工作笔记0056
查看>>
NIFI1.23.2_最新版_性能优化通用_技巧积累_使用NIFI表达式过滤表_随时更新---大数据之Nifi工作笔记0063
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_根据binlog实现数据实时delete同步_实际操作04---大数据之Nifi工作笔记0043
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置binlog_使用处理器抓取binlog数据_实际操作01---大数据之Nifi工作笔记0040
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_实现数据插入数据到目标数据库_实际操作03---大数据之Nifi工作笔记0042
查看>>
NIFI从MySql中离线读取数据再导入到MySql中_03_来吧用NIFI实现_数据分页获取功能---大数据之Nifi工作笔记0038
查看>>
NIFI从MySql中离线读取数据再导入到MySql中_无分页功能_02_转换数据_分割数据_提取JSON数据_替换拼接SQL_添加分页---大数据之Nifi工作笔记0037
查看>>
NIFI从PostGresql中离线读取数据再导入到MySql中_带有数据分页获取功能_不带分页不能用_NIFI资料太少了---大数据之Nifi工作笔记0039
查看>>
nifi使用过程-常见问题-以及入门总结---大数据之Nifi工作笔记0012
查看>>
NIFI分页获取Mysql数据_导入到Hbase中_并可通过phoenix客户端查询_含金量很高的一篇_搞了好久_实际操作05---大数据之Nifi工作笔记0045
查看>>
NIFI同步MySql数据_到SqlServer_错误_驱动程序无法通过使用安全套接字层(SSL)加密与SQL Server_Navicat连接SqlServer---大数据之Nifi工作笔记0047
查看>>
Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066
查看>>
NIFI大数据进阶_FlowFile拓扑_对FlowFile内容和属性的修改删除添加_介绍和描述_以及实际操作---大数据之Nifi工作笔记0023
查看>>
NIFI大数据进阶_Json内容转换为Hive支持的文本格式_操作方法说明_01_EvaluteJsonPath处理器---大数据之Nifi工作笔记0031
查看>>
NIFI大数据进阶_Kafka使用相关说明_实际操作Kafka消费者处理器_来消费kafka数据---大数据之Nifi工作笔记0037
查看>>
NIFI大数据进阶_Kafka使用相关说明_实际操作Kafka生产者---大数据之Nifi工作笔记0036
查看>>
NIFI大数据进阶_NIFI的模板和组的使用-介绍和实际操作_创建组_嵌套组_模板创建下载_导入---大数据之Nifi工作笔记0022
查看>>
NIFI大数据进阶_NIFI监控的强大功能介绍_处理器面板_进程组面板_summary监控_data_provenance事件源---大数据之Nifi工作笔记0025
查看>>
NIFI大数据进阶_NIFI集群知识点_认识NIFI集群以及集群的组成部分---大数据之Nifi工作笔记0014
查看>>
NIFI大数据进阶_NIFI集群知识点_集群的断开_重连_退役_卸载_总结---大数据之Nifi工作笔记0018
查看>>