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小助手,总的来说,现在记不住没关系,用多了就记住了。
相关文章:
Qt笔记 事件处理_鼠标事件
什么是事件? 点击鼠标左键,双击鼠标左键,鼠标来回移动,按下键盘按钮,这些都是事件。 那么事件的响应机制是什么样的呢? 首先main函数中有一个QApplication,其作用是创建一个应用程序对象&…...
【Vue】三、使用ElementUI实现图片上传
目录 一、前端代码实现 二、后端代码实现 三、调试效果实现 一、前端代码实现 废话不多说直接上代码 <el-form-item prop"image" label"上传图片" v-model"form.image"><el-upload:action"http://localhost:8…...
ffmpeg的ffprobe.exe查询修改视频信息
# 查询视频信息 ffprobe -i 1.mp4Input #0, mov,mp4,m4a,3gp,3g2,mj2, from video.mp4:Metadata:major_brand : isomminor_version : 512compatible_brands: isomiso2avc1mp41encoder : Lavf58.20.100comment : 123654Duration: 00:00:15.21, start: 0.0…...
Windows 2019服务器上安装NFS服务器
提供NFS服务服务器: Windows 2019服务器上安装NFS服务器资源管理器 创建目录比如D:\nfshare, 鼠标邮件菜单 点击 属性,进行NFS共享 使用NFS服务的客户端: 另外一台Windows服务器,需要安装NFS客户端 具体操作:Window…...
元素定位之xpath和css
元素定位 xpath绝对路径相对路径案例xpath策略(路径)案例xpath策略(层级、扩展)属性层级与属性层级与属性拓展层级与属性综合 csscss选择器(id、类、标签、属性)id选择器类选择器标签选择器属性选择器案例-…...
JavaScript 什么是纯函数,有哪些常见的纯函数
什么是纯函数 纯函数是指那些不依赖于外部状态,也不改变外部状态的函数。在JavaScript中,纯函数的返回值仅由其输入参数决定,而且执行纯函数不会产生副作用,比如修改全局变量或修改传入的参数。 常见的纯函数 JavaScript中一些常…...
c++ 指针大小
C的一个指针占内存几个字节? 结论: 取决于是64位编译模式还是32位编译模式(注意,和机器位数没有直接关系) 在64位编译模式下,指针的占用内存大小是8字节在32位编译模式下,指针占用内存大小是4字…...
IBM SPSS Statistics:提升数据处理效率的利器
IBM SPSS Statistics软件是一款功能强大的统计软件平台,广泛应用于学术研究、市场调查、数据挖掘和业务决策等领域。其主要功能特色体现在以下几个方面: 基础描述统计功能:软件提供平均值、众数、标准差、百分位数等多种常用的统计数值&#…...
is ignored, because it exists, maybe from xml file
1、问题概述? springboot整合mybatisplus启动的时候报错信息如下: 2024-03-20 10:12:19.239 ERROR 17840 --- [ main] c.b.m.core.MybatisConfiguration : mapper[com.hazq.hazqoa.mapper.DutyTrunsMapper.dutyTrunsExistence] is …...
Spark面试整理-Spark是什么?
Apache Spark是一个开源的分布式计算系统,它提供了一个用于大规模数据处理的快速、通用、易于使用的平台。它最初是在加州大学伯克利分校的AMPLab开发的,并于2010年开源。自那时起,Spark已经成为大数据处理中最受欢迎和广泛使用的框架之一。下面是Spark的一些关键特点: 速度…...
Android 13.0 开机启动优化之PMS扫描apk耗时相关功能优化
1.前言 在android13.0的系统rom定制化开发中,在系统中开发产品时,会根据客户要求内置第三方app,这时如果内置app过多,或者安装的app过多,在系统开机的过程中 在pms扫描安装app的时候,就会比较耗时,这时候就需要优化下pms扫描安装app这块的功能代码,用多线程来实现pms扫…...
云蜜罐技术(德迅猎鹰)诞生
数字化程度高且高价值信息密集的行业,如金融、能源、互联网、政府、教育、医疗、军工等行业,面对日益规模化、专业化的网络攻击,渐渐不再满足于一味的防守加固。除了巩固防线之外,他们愈发看重主动出击、感知更大范围内的攻击&…...
ARM:汇编点灯
.text .global _start _start: 使能GPIOE和GPIOF的外设时钟 LDR R0,0x50000A28 指定寄存器地址 LDR R1,[R0] 将寄存器原来的数值读取出来,保存到R1中 ORR R1,R1,#(0x3<<4) 将第3/4位设置为1 STR R1,[R0] 将修改后的数值写回设置LED1亮 设置PE10为输出…...
69: 偷菜时间表(python)
收藏 难度:一般 标签:暂无标签 题目描述 随着“开心农场”等娱乐游戏风靡互联网,“偷菜”遂瞬间蹿红网络,席卷网民生活。 于是,“你‘偷’了吗”便成为大家见面的招呼语。很快,数百万都市白领成为“偷菜…...
【计算机视觉】三、图像处理——实验:图像去模糊和去噪、提取边缘特征
文章目录 0. 实验环境1. 理论基础1.1 滤波器(卷积核)1.2 PyTorch:卷积操作 2. 图像处理2.1 图像读取2.2 查看通道2.3 图像处理 3. 图像去模糊4. 图像去噪4.1 添加随机噪点4.2 图像去噪 0. 实验环境 本实验使用了PyTorch深度学习框架,相关操作…...
用css滤镜做颜色不同的数据卡片(背景图对于css滤镜的使用)
<template> <div class"xx_modal_maincon"><div class"xx_model_bt">履约起始日至计算日配额及履约情况</div><el-row><el-col :span"6"><div class"xx_modal_mod"><div class"mod…...
2024年第六届区块链与物联网国际会议(BIOTC 2024)即将召开!
2024年第六届区块链与物联网国际会议(简称:BIOTC 2024)将于2024 年 7 月 19 日至 21 日在日本福冈召开,旨在为来自行业、学术界和政府的研究人员、从业者和专业人士提供一个论坛,就研发区块链和物联网的专业实践进行交…...
Django动态路由实例
Django动态路由实例 先说需求: 比如我前端有两个按钮,点击按钮1跳转到user1的用户信息页面,按钮2跳转user2用户信息页面,但是他俩共用同一个视图层 直接上代码 路由层 urlpatterns [path(user/<str:username>/, views…...
基于Vue.js和D3.js的智能停车可视化系统
引言 随着物联网技术的发展,智能停车系统正逐渐普及。前端作为用户交互的主要界面,对于提供直观、实时的停车信息至关重要。 目录 引言 一、系统设计 二、代码实现 1. 环境准备 首先,确保您的开发环境已经安装了Node.js和npm。然后&…...
数据之王国:解析Facebook的大数据应用
引言 作为全球最大的社交媒体平台之一,Facebook拥有庞大的用户群体和海量的数据资源。这些数据不仅包括用户的个人信息和社交行为,还涵盖了广告点击、浏览记录等多方面内容。Facebook通过巧妙地利用这些数据,构建了强大的大数据应用系统&…...
MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...
