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控件的鼠标事件捕获相关推荐

  1. vb检测html事件,VB代码VB小程序:捕获 WebBrowser 控件的鼠标事件

    49. 捕获 WebBrowser 控件的鼠标事件 VB 的网页浏览控件 WebBrowser 没有 MouseDown.MouseMove.MouseUp 等鼠标事件,要在程序中捕获这些事件,必须另 ...

  2. Qt给控件添加鼠标事件

    处理控件上的鼠标事件,是做界面人机交互经常需要的,本文做一个使用的总结.本文在QLable控件中实验过. 一.在h文件中声明鼠标响应事件处理函数 public:explicit MainWindow( ...

  3. 从零开始学_JavaScript_系列(九)——dojo(2)(AJAX、时间控件、鼠标事件、样式修改、事件移除、消息发布订阅)

    如果没有接触过dojo,建议阅读: http://blog.csdn.net/qq20004604/article/details/51028702 里面介绍了如何加载dojo. 关于dojo的下载, ...

  4. AspxCallBack控件的CallBack事件

    AspxCallBack控件的CallBack事件 AspxCallBack控件的CallBack事件 1)不能弹出窗口: 2)取AspxDropDownList控件客户端的值使用 ddl.Clien ...

  5. Python Tkinter教程(二)——Label控件、Frame控件、Button控件的完整参数和所有方法及详细用法

    >>>[上节回顾:tkinter编程基本步骤.窗口基本属性及Toplevel控件的使用]<<< Python Tkinter教程(二)         这篇博客将详 ...

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

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

  7. qt界面中禁用某个控件的鼠标滑轮事件

    主要思想就是:当进入滑轮的滚动事件的时候,就禁用该控件,而进入鼠标点击事件的时候,就将这个控件进行激活 如:spinBox控件,鼠标的过滤事件可以参考博客:https://blog.csdn.net/ ...

  8. 事件冒泡控件示例(转载)

    .NET Framework 开发员指南   事件冒泡 ASP.NET 页框架提供一种称为"事件冒泡"的技术,允许子控件将事件沿其包容层次结构向上传播.事件冒泡允许在控件层次结构中 ...

  9. Qt小程序之QQ登录窗口输入框控件

    一.简述 在前面的文章里为大家展示了用Qt实现的QQ登录界面以及QQ窗口的右键菜单控件,(Qt 实现 QQ 9.0版 自定义菜单控件.以及Qt 实现 QQ 9.0 新版登录窗口),有兴趣的小伙伴可以看 ...

最新文章

  1. [Groovy] Groovy API
  2. MVC案例——模糊查询
  3. 关于ORACLEOraDb11g_home1TNSListener服务启动后又停止问题的关键点
  4. Attention模型:我的注意力跟你们人类不一样
  5. aws s3 獲取所有文件_通过Java上传下载AWS S3文件,并解决文件数量超过1000的问题...
  6. 5、扩展骨架文件内容
  7. 如何监视SQL Server索引的总大小
  8. 微软公开PrintNightmare系列第3枚无补丁0day,谷歌修复第8枚已遭利用0day
  9. win11能否安装cad Windows11安装cad的解决方法
  10. LIRE的使用:搜索相似的图片
  11. Redhat Linux Enterprise Server 5.5 x86_64位操作系统Karachi时区问题?
  12. 使用sourcetree 的git flow
  13. mysql 转字符串 blob_BLOB转换为字符串或图像/ PHP或SQL
  14. 中国电网计算机面试题目,国家电网面试经验
  15. 助力公共事业服务,RPA大显身手
  16. background-position切图
  17. android平板投屏,安卓手机投屏到平板
  18. [ZT]完全用Linux工作,摈弃Windows
  19. 熬夜肝出囊括Java后端95%的面试题解析
  20. python对数正态分布函数_Python对数正态分布函数,python,中,的

热门文章

  1. bzoj1577 [Usaco2009 Feb]庙会捷运Fair Shuttle
  2. [Luogu P2387] [NOI2014]魔法森林 (LCT维护边权)
  3. (转)VC++多线程编程
  4. Python知识点汇总
  5. TB创建公式应用dll失败 请检查用户权限,终极解决方案
  6. c语言字符数组的应用编程,C语言基础(一)
  7. 数据仓库、数据集市、数据湖、数据中台到底有什么区别?
  8. Python+BI爬取3000条车厘子数据,发现了这些秘密
  9. python os库
  10. 阿里云mysql写入性能_如何评价阿里云新一代关系型数据库 PolarDB?