Qt—事件处理

news/2024/11/8 16:48:16/

Qt中,事件作为一个对象,继承自QEvent类,常见的有键盘事件QKeyEvent、鼠标事件QMouseEvent和定时器事件QTimerEvent等。Qt中,任何QObject子类示例都可以接收和处理事件。实际编程中通常实现部件的paintEvent()、mousePressEvent()等事件处理函数来处理特定部件的特定事件。

每个程序的main函数最后都会调用QApplication类的exec()函数,它会使Qt应用程序进入到事件循环,使应用程序在运行的时候接收各种事件。一旦有事件发生,Qt便会构造一个相应的QEvent子类的对象来表示它,然后将它传递给QObject对象或子对象。

鼠标事件

将鼠标移动、按下与释放时的位置希纳是在状态栏中。

在构造函数中。向状态栏添加两个永久QLabel标签,m_statusLabel用来信息提示,m_sposLabel用来显示鼠标移动时的坐标

重写鼠标按下方法:

重写鼠标移动方法:

重写鼠标松开方法:

键盘事件

当按方向键时,图片每次移动20像素;当按下Ctrl+方向键时,图片每次移动1像素

新建桌面应用程序testKeyEvent,类名KeyEvent,基类QWidget,通过重写键盘事件到达操作的键盘的时候窗口中的图片上下左右移动,类似QtCreator设计模式下通过按键摆放部件时的效果。

将网格线和图片绘制在一个QPixmap类上,每次有上下左右按键时重新绘制QPixmap。重写绘制方法,将图片绘制到应用程序上。

将网格线与图片绘制到QPixmap类上,m_pix是一个和应用程序一样大小的QPixmap类:

重写绘制方法,将QPixmap类绘制到应用程序上:

重写按键方法,判断按键类型,如果是Ctrl+方向键则每次移动距离一个像素,如果仅是方向键则每次移动20像素:

m_startx和m_starty为int类型,用来记录QPixmap类上图片的位置;m_height和m_width也为int类型,用来记录应用程序的高、宽。

程序直接结束后调用update( )方法重绘应用程序。

构造函数:

事件过滤

Qt的事件过滤由以上两个方法实现,首先对需要监听的对象安装一个事件过滤器,调用installEventFilter( )方法,参数filterObj表示监听者,它监听发送到此对象的所有事件。过滤器可以停止此事件,也可以iang此事件发送给此QObject对象那个。世家过滤器filterObj用过它的eventFilter( )函数接收事件。

重写bool eventFilter(QObject *obj, QEvent *event)方法用来对过滤的事件进行处理

eventFilter()的返回值。

  • 如果返回true,表示事件过滤,不会发送到对象本身。

  • 如果返回false,表示事件未过滤,会通过event()方法将事件分发到对象。

  • 返回给基类进行处理,例:return QObject::eventFilter(obj, event)。

示例

鼠标左键、中键和右键点击图片时图片放大,松开时图片回到原始大小。同时,将对应的鼠标事件的信息显示在右边标签内,

构造函数中初始化部件,并将图片所在的标签部件安装事件过滤器

重写bool eventFilter(QObject *watched, QEvent *event)

QMouseEvent: :buttons( )与QMouseEvent: :button( )的区别

假设你的鼠标左键已经按下。

如果移动鼠标,会发生的move事件,button返回Qt::NoButton,buttons返回LeftButton。

再按下了右键,会发生press事件,button返回RightButton,buttons返回LeftButton|RightButton

再移动鼠标,会发生move事件,button返回Qt::NoButton,buttons返回LeftButton|RightButton

再松开左键,会发生Release事件,button返回LeftButton,buttons返回RightButton

也就是说,button返回“哪个按钮发生了此事件”,buttons返回“发生事件时哪些按钮还处于按下状态”

追风赶月莫停留,平芜尽处是春山!


http://www.ppmy.cn/news/9927.html

相关文章

年度征文 | 回顾2022,展望2023 (清风与我)

个人简介: 名称内容个人主页清风与我学习方向主攻前端方向推荐学习vue,vue3,node.js,React,项目实战推荐学习用网站菜鸟教程,博客,哔哩哔哩 …学习用资源网vue,element,…

八、k8s 数据存储

文章目录1 数据存储介绍1.1 基本存储1.1.1 EmptyDir1.1.2 HostPath1.1.3 NFS2 高级存储2.1 PV2.2 PVC2.3 生命周期3 配置存储3.1 ConfigMap3.2 Secret1 数据存储介绍 在前面已经提到,容器的生命周期可能很短,会被频繁地创建和销毁。那么容器在销毁时&am…

容器生命周期事件处理

容器生命周期事件处理 Kubernetes 中支持容器的 postStart 和 preStop 事件,本文阐述了如何向容器添加生命周期事件处理程序(handler)。 postStart 容器启动时,Kubernetes 立刻发送 postStart 事件,但不确保对应的 h…

Arduino与Proteus仿真实例-人脸追踪及反馈到舵机转向控制仿真

人脸追踪及反馈到舵机转向控制仿真 文章目录 人脸追踪及反馈到舵机转向控制仿真1、仿真电路原理图2、仿真代码实现3、人脸检测及追踪代码4、仿真结果本文将演示如何通过OpenCV进行人脸检测、追踪并反馈到舵机转向控制。OpenCV检测到人脸后,实时跟踪人脸的移动方向,转换成XY坐…

Day1. Spring

1 课程描述IoC基础容器,主要涉及Bean对象的管理。AOP面向切面编程,主要涉及切面配置,声明式事务控制Spring整合Web环境。Web层解决方案-SpringMVC.1.1 IoC、DI和AOP思想的提出由于传统的JavaWeb出现的问题:问题1:层与层…

【C语言进阶】 带你玩转指针

指针进阶一、字符指针二、指针数组三、数组指针3.1:数组指针的使用四、数组参数、指针参数4.1:一维数组传参4.2:二维数组传参4.3:一级指针传参:4.4:二级指针传参:五:函数指针一、字符…

【 uniapp - 黑马优购 | 商品详情 】详情页UI结构设计、商品导航区域实现

个人名片: 🐼作者简介:一名大二在校生,讨厌编程🎋 🐻‍❄️个人主页🥇:小新爱学习. 🐼个人WeChat:hmmwx53 🕊️系列专栏:&#x1f5bc…

纪念2022年11月软考高项(信息系统项目管理师)一次通过的经验随笔

一、备考背景2022年5月的浙江软考因为疫情防控原因临时取消,我离杭州买房又远了几分。众所周知,杭州是炒房投资客的香饽饽,即使主城区购房摇号制度不停打补丁,也难济于事。自住客为了与投资客抗衡,一靠社保&#xff0c…