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通过巧妙地利用这些数据,构建了强大的大数据应用系统&…...
React 逻辑的可测试性:针对 React Hooks 的单体测试与渲染行为模拟的质量保障实践
React 逻辑的可测试性:针对 React Hooks 的单体测试与渲染行为模拟的质量保障实践 主讲人: 某资深前端架构师(也就是我) 受众: 想要逃离“闭包地狱”和“测试屎山”的前端开发者们 时长: 漫长的周一午后 第…...
主流AI培训机构技术栈与教学模式横向评测:面向开发者的选型参考
引言:从技术焦虑到能力构建的十字路口随着生成式AI技术的爆炸式发展,从底层模型架构(如Transformer)到上层应用开发(如智能体、多模态生成),技术栈迭代速度前所未有。广大开发者与技术人员正面临…...
离职4个月后,前领导竟然半夜让我改方案!他说明早9点要用,我灵机一动答应他8点交付!挂掉电话后,我彻底拉黑了领导,微笑入睡
离职四个月了,前领导半夜11点给我打电话。电话一接通,他的语气跟以前一模一样,不是问,是说,「那个方案你还有底稿吧,明早9点我要用,你帮我改一下。」我当时躺在床上,盯着天花板&…...
Mozilla推出Thunderbolt AI客户端,主打自托管基础设施
Mozilla是最新一家进军企业AI市场的传统科技品牌。不过,这家Firefox和Thunderbird背后的公司并没有发布独立的AI模型或智能体浏览器,而是推出了全新的Thunderbolt——一款面向希望运行自托管AI基础设施、同时不依赖第三方云服务的用户和企业的前端客户端…...
DataX实战:用querySql搞定多表关联同步,别再傻傻分表导入了
DataX高级实战:querySql在多表关联同步中的深度应用 引言 在数据集成领域,ETL工程师经常面临一个经典难题:如何高效处理多表关联的数据同步任务?传统做法往往需要先分表导出再关联处理,不仅效率低下,还增加…...
ESP32-C3 蓝牙应用实战:从零构建一个自定义 GATT 服务
1. 环境准备:搭建ESP32-C3开发环境 第一次接触ESP32-C3蓝牙开发的朋友可能会觉得无从下手,其实只要把开发环境搭好就成功了一半。我刚开始用Windows系统开发时踩过不少坑,后来发现用VSCode配合官方ESP-IDF工具链最省心。 首先需要安装乐鑫官方…...
WooCommerce 用户登录状态控制元素显隐的 CSS 实现方案
本文详解如何在 woocommerce 中通过 css 精准控制元素(如价格)在用户登录/登出时的显示与隐藏,重点解决常见失效问题,并提供可维护、无需 php 输出样式的纯 css 方案。 本文详解如何在 woocommerce 中通过 css 精准控制元素&…...
新手避坑指南:用Proteus和Keil C51实现按键流水灯,仿真和实物现象为啥是反的?
51单片机按键控制LED的仿真与实物差异全解析 第一次用Proteus仿真按键控制LED流水灯时,看到仿真结果和实物现象完全相反,那种困惑感我至今记忆犹新。当时盯着开发板反复检查电路连接,确认代码无误后,现象依然与仿真不符࿰…...
手把手教你理解交叉编译:从嵌入式开发到Rust编译Android So库
手把手教你理解交叉编译:从嵌入式开发到Rust编译Android So库 当你在x86架构的笔记本上按下编译按钮,却要为树莓派(ARM架构)生成可执行文件时,背后发生了什么?这种"在A平台编译B平台程序"的技术&…...
【PyTorch实战】CrossEntropyLoss:从数学原理到代码避坑指南
1. 交叉熵损失函数的前世今生 我第一次接触CrossEntropyLoss是在做一个图像分类项目的时候。当时模型训练总是出问题,损失值波动特别大,后来才发现是没搞明白这个损失函数的输入格式要求。交叉熵本质上是一种衡量两个概率分布差异的方法,在分…...
