当前位置: 首页 > news >正文

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笔记 事件处理_鼠标事件

什么是事件&#xff1f; 点击鼠标左键&#xff0c;双击鼠标左键&#xff0c;鼠标来回移动&#xff0c;按下键盘按钮&#xff0c;这些都是事件。 那么事件的响应机制是什么样的呢&#xff1f; 首先main函数中有一个QApplication&#xff0c;其作用是创建一个应用程序对象&…...

【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服务服务器&#xff1a; Windows 2019服务器上安装NFS服务器资源管理器 创建目录比如D:\nfshare, 鼠标邮件菜单 点击 属性&#xff0c;进行NFS共享 使用NFS服务的客户端&#xff1a; 另外一台Windows服务器&#xff0c;需要安装NFS客户端 具体操作&#xff1a;Window…...

元素定位之xpath和css

元素定位 xpath绝对路径相对路径案例xpath策略&#xff08;路径&#xff09;案例xpath策略&#xff08;层级、扩展&#xff09;属性层级与属性层级与属性拓展层级与属性综合 csscss选择器&#xff08;id、类、标签、属性&#xff09;id选择器类选择器标签选择器属性选择器案例-…...

JavaScript 什么是纯函数,有哪些常见的纯函数

什么是纯函数 纯函数是指那些不依赖于外部状态&#xff0c;也不改变外部状态的函数。在JavaScript中&#xff0c;纯函数的返回值仅由其输入参数决定&#xff0c;而且执行纯函数不会产生副作用&#xff0c;比如修改全局变量或修改传入的参数。 常见的纯函数 JavaScript中一些常…...

c++ 指针大小

C的一个指针占内存几个字节&#xff1f; 结论&#xff1a; 取决于是64位编译模式还是32位编译模式&#xff08;注意&#xff0c;和机器位数没有直接关系&#xff09; 在64位编译模式下&#xff0c;指针的占用内存大小是8字节在32位编译模式下&#xff0c;指针占用内存大小是4字…...

IBM SPSS Statistics:提升数据处理效率的利器

IBM SPSS Statistics软件是一款功能强大的统计软件平台&#xff0c;广泛应用于学术研究、市场调查、数据挖掘和业务决策等领域。其主要功能特色体现在以下几个方面&#xff1a; 基础描述统计功能&#xff1a;软件提供平均值、众数、标准差、百分位数等多种常用的统计数值&#…...

is ignored, because it exists, maybe from xml file

1、问题概述&#xff1f; springboot整合mybatisplus启动的时候报错信息如下&#xff1a; 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扫…...

云蜜罐技术(德迅猎鹰)诞生

数字化程度高且高价值信息密集的行业&#xff0c;如金融、能源、互联网、政府、教育、医疗、军工等行业&#xff0c;面对日益规模化、专业化的网络攻击&#xff0c;渐渐不再满足于一味的防守加固。除了巩固防线之外&#xff0c;他们愈发看重主动出击、感知更大范围内的攻击&…...

ARM:汇编点灯

.text .global _start _start: 使能GPIOE和GPIOF的外设时钟 LDR R0,0x50000A28 指定寄存器地址 LDR R1,[R0] 将寄存器原来的数值读取出来&#xff0c;保存到R1中 ORR R1,R1,#(0x3<<4) 将第3/4位设置为1 STR R1,[R0] 将修改后的数值写回设置LED1亮 设置PE10为输出…...

69: 偷菜时间表(python)

收藏 难度&#xff1a;一般 标签&#xff1a;暂无标签 题目描述 随着“开心农场”等娱乐游戏风靡互联网&#xff0c;“偷菜”遂瞬间蹿红网络&#xff0c;席卷网民生活。 于是&#xff0c;“你‘偷’了吗”便成为大家见面的招呼语。很快&#xff0c;数百万都市白领成为“偷菜…...

【计算机视觉】三、图像处理——实验:图像去模糊和去噪、提取边缘特征

文章目录 0. 实验环境1. 理论基础1.1 滤波器&#xff08;卷积核&#xff09;1.2 PyTorch:卷积操作 2. 图像处理2.1 图像读取2.2 查看通道2.3 图像处理 3. 图像去模糊4. 图像去噪4.1 添加随机噪点4.2 图像去噪 0. 实验环境 本实验使用了PyTorch深度学习框架&#xff0c;相关操作…...

用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年第六届区块链与物联网国际会议&#xff08;简称&#xff1a;BIOTC 2024&#xff09;将于2024 年 7 月 19 日至 21 日在日本福冈召开&#xff0c;旨在为来自行业、学术界和政府的研究人员、从业者和专业人士提供一个论坛&#xff0c;就研发区块链和物联网的专业实践进行交…...

Django动态路由实例

Django动态路由实例 先说需求&#xff1a; 比如我前端有两个按钮&#xff0c;点击按钮1跳转到user1的用户信息页面&#xff0c;按钮2跳转user2用户信息页面&#xff0c;但是他俩共用同一个视图层 直接上代码 路由层 urlpatterns [path(user/<str:username>/, views…...

基于Vue.js和D3.js的智能停车可视化系统

引言 随着物联网技术的发展&#xff0c;智能停车系统正逐渐普及。前端作为用户交互的主要界面&#xff0c;对于提供直观、实时的停车信息至关重要。 目录 引言 一、系统设计 二、代码实现 1. 环境准备 首先&#xff0c;确保您的开发环境已经安装了Node.js和npm。然后&…...

数据之王国:解析Facebook的大数据应用

引言 作为全球最大的社交媒体平台之一&#xff0c;Facebook拥有庞大的用户群体和海量的数据资源。这些数据不仅包括用户的个人信息和社交行为&#xff0c;还涵盖了广告点击、浏览记录等多方面内容。Facebook通过巧妙地利用这些数据&#xff0c;构建了强大的大数据应用系统&…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时&#xff0c;发现没有set类的方法&#xff0c;只有get&#xff0c;那么要改变tree值&#xff0c;只能遍历treeData&#xff0c;递归修改treeData的checked&#xff0c;发现无法更改&#xff0c;原因在于check模式下&#xff0c;子元素的勾选状态跟父节…...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了&#xff0c;报错如下四、启动不了&#xff0c;解决如下 总结 问题原因 在应用中可以看到chrome&#xff0c;但是打不开(说明&#xff1a;原来的ubuntu系统出问题了&#xff0c;这个是备用的硬盘&a…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式&#xff1a;dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一&#xff0c;腐蚀跟膨胀属于反向操作&#xff0c;膨胀是把图像图像变大&#xff0c;而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案&#xff1a;Java 字节码技术实战分享&#xff08;仅供学习&#xff09; 一、Aspose.PDF 简介二、说明&#xff08;⚠️仅供学习与研究使用&#xff09;三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

LRU 缓存机制详解与实现(Java版) + 力扣解决

&#x1f4cc; LRU 缓存机制详解与实现&#xff08;Java版&#xff09; 一、&#x1f4d6; 问题背景 在日常开发中&#xff0c;我们经常会使用 缓存&#xff08;Cache&#xff09; 来提升性能。但由于内存有限&#xff0c;缓存不可能无限增长&#xff0c;于是需要策略决定&am…...

React核心概念:State是什么?如何用useState管理组件自己的数据?

系列回顾&#xff1a; 在上一篇《React入门第一步》中&#xff0c;我们已经成功创建并运行了第一个React项目。我们学会了用Vite初始化项目&#xff0c;并修改了App.jsx组件&#xff0c;让页面显示出我们想要的文字。但是&#xff0c;那个页面是“死”的&#xff0c;它只是静态…...

Python环境安装与虚拟环境配置详解

本文档旨在为Python开发者提供一站式的环境安装与虚拟环境配置指南&#xff0c;适用于Windows、macOS和Linux系统。无论你是初学者还是有经验的开发者&#xff0c;都能在此找到适合自己的环境搭建方法和常见问题的解决方案。 快速开始 一分钟快速安装与虚拟环境配置 # macOS/…...