Qt笔记 事件处理_鼠标事件

什么是事件?

点击鼠标左键,双击鼠标左键,鼠标来回移动,按下键盘按钮,这些都是事件。

那么事件的响应机制是什么样的呢?

首先main函数中有一个QApplication,其作用是创建一个应用程序对象,然后该应用程序对象调用exec这个函数,这个函数所起的作用是会在当前应用程序下一直检测是否有事件产生,当有事件产生的时候就会触发一系列的动作。

事件的产生和处理可以分为几个重要的步骤来理解:

1.事件的产生

2.事件过滤

3.事件分发

4.事件处理

首先:

1.事件的产生

我们知道事件产生后,被应用程序对象的exec函数检测到,这个时候应用程序对象会调用一个notify函数,将事件发送到指定的窗口里面去。

2.事件过滤

在事件发送到指定窗口的过程中,我们是可以通过事件过滤器进行过滤的。QObject里面有一个成员函数叫做evenFilter,这个eventFilter是可以过滤掉一些事件的。而且这个eventFilter是一个虚函数,我们是可以对该函数进行重写的,可以在该函数内编辑那些是可以过滤掉的。(默认情况下是不对任何事件进行过滤的),我们翻查Qt助手可以知道,QObject是QApplication的基类,因此QApplication中可以定义事件过滤,因此可以说事件过滤是main函数中的QAppliaction生成的对象a所完成的。

3.事件分发

Qwidget可以对事件进行分发

4.事件处理

Qwidget中有事件处理的函数,是虚函数,可以进行重写。

有图可知,事件发送到指定窗口后,由窗口来对事件进行处理。

上面所说的一系列动作都是自动完成的,这些事件函数都是回调函数,作为使用者来说,我们只需要指定函数的处理动作,关于函数是如何是如何调用的,我们不需要关心。可以理解为是Qt这个框架自动调用的,我们只需要完成调用后执行什么内容。

所以我们只需要重写事件处理函数就可以了,即123步骤由Qt这个框架自动完成。

鼠标点击处理事件重写:

(1)重写QWidget的mousePressEvent事件


1.首先声明方法:

最后实现方法

(由图可知,该坐标轴是以左上角的点来作为圆点的)

注意,只有在Widget界面上面点击鼠标才能其效。

(2)重写QWidget中的mouseReleaseEvent事件处理函数

即我们在窗口中释放鼠标会发生什么,这是释放鼠标的时候提示一下就可以了。

void QWidget::mouseReleaseEvent(MouseEvent *event);//在widget.h文件中进行声明;
//在.cpp文件中进行实现void Widget::mouseReleaseEvent(MouseEvent *event)
{qDebug() << "mouse is released.";}

(3)重写QWidget中的mouseDoubleClickEvent

这里重写mouseDoubleClickEvent方法,做到双击全屏,再双击恢复到原始窗口。

//在widget.h文件下进行声明  void mouseDoubleClickEvent(QMouseEvent *event);//在widget.cpp文件下进行实现
void Widget::mouseDoubleClickEvent(QMouseEvent *event)
{if(event->button() == Qt::LeftButton)//如果这个双击事件是一个左键的话{if(windowState() != Qt::WindowFullScreen)//如果现在窗口的状态不是全屏的话{setWindowState(Qt::WindowFullScreen);}else{setWindowState(Qt::WindowNoState);//如果双击前已经是全屏了则恢复到初始状态}}}

(4)重写QWidget中的mouseMoveEvent

这里重写mouseMoveEvent,实现窗口的拖拽

//在widget.h文件下进行声明protected:void wheelEvent(QWheelEvent *event);//在widget.cpp文件下进行定义void Widget::wheelEvent(QWheelEvent *event)//注意,这里改成了wheelEvent表示是滚轮的操作
{if(event->delta() > 0)//delta就是数学中的▲,表示增量{ui->textEdit->zoomIn();//往上滚动是聚焦}else{ui->textEdit->zoomOut();//往下滚动是缩小}}

(5)重写QWidget中的wheelEvent

重写QWidget中的wheelEvent,使其通过滚轮改变字体的大小。

先搞一个TextEdit

//在widget.h
void wheelEvent(QWheelEvent *event);//在widget.cpp
void Widget::wheelEvent(QWheelEvent *event)//注意,这里改成了wheelEvent表示是滚轮的操作
{if(event->delta() > 0)//delta就是数学中的▲,表示增量{ui->textEdit->zoomIn();//往上滚动是聚焦}else{ui->textEdit->zoomOut();//往下滚动是缩小}}

心得:

Qt中的所有宏和枚举量都是在Qt这个类下面的,以后找枚举量去Qt下面找。学习Qt就是要多敲,记住一些常用的方法,记不住就去查Qt小助手,总的来说,现在记不住没关系,用多了就记住了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/759090.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

将后端给的数据转换成el-cascader面板能渲染的数据格式

说明 在业务逻辑中&#xff0c; 往往需要将后端的数据进行格式化 下面代码片是后端给的数据&#xff0c;但在使用el-tree或者是el-cascader时&#xff0c;这种格式数据并不能直接使用&#xff0c;需要进行改造 {"id": 8750,"name": "监控大屏",…

【论文阅读】Masked Autoencoders Are Scalable Vision Learners

Masked Autoencoders Are Scalable Vision Learners 引用&#xff1a; He K, Chen X, Xie S, et al. Masked autoencoders are scalable vision learners[C]//Proceedings of the IEEE/CVF conference on computer vision and pattern recognition. 2022: 16000-16009. 论文链…

UE4_官方动画内容示例1.3_ 运动混合空间(Locomotion BlendSpace)

如何使用运动&#xff08;Locomotion&#xff09;混合空间将Actor在不同方向上及不同速度的运动混合起来。&#xff08;例如&#xff0c;展示了一个混合了以不同速度向后、前、左和右走路/跑步动作的Actor&#xff09;。 一、相关知识点&#xff1a; 混合空间是允许根据多个输…

联想笔记本的声音键没有反应怎么办?

如果我的联想笔记本电脑上的声音按钮没有响应&#xff0c;该怎么办&#xff1f; 如果我的联想笔记本电脑上的声音按钮没有响应&#xff0c;该怎么办&#xff1f; 按下按钮后我无法控制声音。 我该怎么办&#xff1f; 以下是我为您整理的关于联想笔记本声音按键无反应的相关资料…

批量插入集合数据Lists.partition(list, 2000)

批量插入集合数据&#xff08;集合数据量比较大&#xff09;&#xff0c;可以将集合拆分成每次多少条一组&#xff0c;循环插入数据库中。 引入依赖 <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><versio…

[Open3d]: 知识记录

python api 官方手册&#xff1a;http://www.open3d.org/docs/release/ 可视化&#xff1a;http://www.open3d.org/docs/release/tutorial/visualization/visualization.html python-vis 参考代码&#xff1a;https://github.com/isl-org/Open3D/tree/master/examples/python/v…

设计模式的六大基本原则

写代码设计原则是指在编写代码时&#xff0c;遵循一些通用的指导原则&#xff0c;以确保代码的可读性、可维护性、可扩展性和可重用性。这些原则有助于开发人员创建出高质量的软件系统。下面我将介绍几个常见的代码设计原则&#xff0c;并通过C代码例子来说明它们的应用。 1. 单…

Android 10.0 app获取当前已连接wifi列表ssid和密码功能实现

1.前言 在10.0的系统定制化开发中,在一些关于wifi的定制中,有产品需求app中要求获取当前连接wifi和密码功能,在系统原生wifi中 是禁止获取wifi连接的密码的,所以就需要对wifi模块进行一部分的修改,来满足app中获取wifi的ssid和密码功能,接下来就来 实现这个功能 如图:…

金融知识分享系列之:支撑阻力

金融知识分享系列之&#xff1a;支撑阻力 一、支撑阻力原理二、支撑阻力作用1.识别市场资金的预期2.作为入场和平仓的重要参考 三、寻找支撑阻力四、延伸思考五、支撑阻力总结 一、支撑阻力原理 支撑阻力核心要素&#xff1a; 锚定效应订单驱动 支撑阻力原理&#xff1a; 市…

爬虫系列-CSS基础语法

&#x1f308;个人主页&#xff1a;会编程的果子君 &#x1f4ab;个人格言:“成为自己未来的主人~” CSS全称层叠样式表 &#xff0c;主要用来定义页面内容展示效果的一门语言&#xff0c;HTML&#xff1a;页面骨架&#xff0c;素颜CSS&#xff1a;页面效果美化&#xff1a…

01分布式搜索引擎ES

分布式搜索引擎ES 1.初识elasticsearch1.1.了解ES1.2.倒排索引1.3.es的一些概念 2.索引库操作2.1.mapping映射属性2.2.索引库的CRUD 3.文档操作3.1.新增文档3.2.查询文档3.3.删除文档3.4.修改文档3.5.总结 4.RestAPI4.0.导入Demo工程4.1.创建索引库4.2.删除索引库4.3.判断索引库…

免费PDF转换和编辑工具 PDFgear 2.1.4

PDFgear是一款功能强大的 PDF 阅读及转换软件。 它支持多种文件格式的转换和编辑&#xff0c;同时还提供了丰富的功能模块&#xff0c;如签名、表单填写等&#xff0c;方便用户进行多样化的操作。 该软件界面简洁美观&#xff0c;操作简单易懂&#xff0c;适合不同层次的用户…

java static

1、static概念 &#xff08;1&#xff09;static 关键字是静态的意思&#xff0c;可以修饰成员方法&#xff0c;成员变量 &#xff08;2&#xff09;static 修饰的特点 ① 被类的所有对象共享&#xff0c;这也是我们判断是否使用静态关键字的条件。 ② 可以通过类名调用&…

机器学习-06-回归算法

总结 本系列是机器学习课程的系列课程&#xff0c;主要介绍机器学习中回归算法&#xff0c;包括线性回归&#xff0c;岭回归&#xff0c;逻辑回归等部分。 参考 fit_transform,fit,transform区别和作用详解&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&am…

ActiViz三维场景的基本要素——相机

文章目录 前言一、基本属性和方法二、相机操作三、高级功能四、 示例代码和应用五、总结前言 在ActiViz中,vtkCamera是一个非常重要的类,用于定义观察场景的视角和位置。作为三维可视化的核心组件之一,vtkCamera决定了用户在三维场景中所看到的图像内容和视角,因此它对于呈…

突破编程_C++_STL教程( queue 的基础知识)

1 std::queue 概述 std::queue 是 C 标准模板库&#xff08;STL&#xff09;中的一种容器适配器&#xff0c;它提供了队列&#xff08;Queue&#xff09;这种数据结构的功能。队列是一种特殊的线性表&#xff0c;它只允许在表的前端&#xff08;front&#xff09;进行删除操作…

Linux运维_Bash脚本_编译安装Apache(httpd-2.4.54)

Linux运维_Bash脚本_编译安装Apache(httpd-2.4.54) Bash (Bourne Again Shell) 是一个解释器&#xff0c;负责处理 Unix 系统命令行上的命令。它是由 Brian Fox 编写的免费软件&#xff0c;并于 1989 年发布的免费软件&#xff0c;作为 Sh (Bourne Shell) 的替代品。 您可以在…

基于Java中的SSM框架实现在线通用旅游平台网站系统项目【项目源码+论文说明】计算机毕业设计

基于Java中的SSM框架实现在线通用旅游平台网站系统演示 摘要 近几年来&#xff0c;计算机网络的发展得到了飞速的提升&#xff0c;由此展开的一系列行业大洗牌也由此开始。早些年只是人们只是对于计算机和互联网有了些基础的认识&#xff0c;现在它正在悄悄的改变着我们生活的…

富格林:运用可信技巧揪出暗箱黑幕

富格林悉知&#xff0c;在伦敦金中&#xff0c;对于市场中的暗箱黑幕骗局投资者应该从容应对&#xff0c;利用可信技巧顺利盈利。在市场投资中&#xff0c;投资者需要不断的学习伦敦金基础知识&#xff0c;总结可信的做单方法&#xff0c;更要从以往案例分析受害原因正规预防。…

安装MySQL5.7.19 + 解决数据库乱码

文章目录 1.删除mysql服务 sc delete mysql2.解压到D:\mysql5.7下3.配置管理员环境变量4.D:\mysql5.7\mysql-5.7.19-winx64下创建my.ini1.创建文件2.文件内容 5.管理员打开cmd&#xff0c;切换到 D:\mysql5.7\mysql-5.7.19-winx64\bin6.输入 mysqld -install 安装mysql服务7.初…