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

c++ qt--事件过滤(第七部分)

c++ qt–事件过滤(第七部分)

一.为什么要用事件过滤

上一篇博客中我们用到了事件来进行一些更加细致的操作,如监控鼠标的按下与抬起,但是我们发现如果有很多的组件那每个组件都要创建一个类,这样就显得很麻烦,所以我们就可以引入事件过滤了,事件过滤不需要创建类,只需要安装过滤器然后重写过滤器函数就可以了

二.写一个使用了事件过滤例子

1.所用到组件如下

在这里插入图片描述

这里还用到了栅格布局

2.安装过滤器

在mainwindow.cpp的构造函数中写下面代码

ui->lineEdit->installEventFilter(this/*参数得是对象*/);//安装过滤器,相当于某个组件安装监控,查看的权力交给MainWindow(物业)
ui->plainTextEdit->installEventFilter(this);//安装过滤器,相当于某个组件安装监控,查看的权力交给MainWindow(物业)

3.重写过滤器函数

1.声明

在mainwindow.h的类中写下面代码

public:bool eventFilter(QObject *watched, QEvent *event);

2.定义

在mainwindow.cpp中写下面代码

bool MainWindow::eventFilter(QObject *watched, QEvent *event){if(watched==ui->lineEdit){//如果是密码组件if(event->type()/*获取事件的类型*/==QEvent::KeyPress){//如果是键盘按下的事件QKeyEvent* pKey=(QKeyEvent*)event;//相当于是强转成具体事件的指针if(pKey->key()>=Qt::Key_A&&pKey->key()<=Qt::Key_Z){//如果是字母qDebug()<<"放行"<<pKey->key();return false;//不过滤,(放行)}else{qDebug()<<"过滤"<<pKey->key();return true;//过滤(不放行)}}}else if(watched==ui->plainTextEdit){//如果是多行文本输入框if(event->type()==QEvent::Wheel){//如果是滑轮按下的事件QWheelEvent* pWheel =(QWheelEvent*)event;//相当于是强转成具体事件的指针if(pWheel->buttons()==Qt::MidButton){//如果按下鼠标中间qDebug()<<"x == "<<pWheel->angleDelta().x();//alt+上:y=120 alt+下:y=-120qDebug()<<"y == "<<pWheel->angleDelta().y();//上:y=120 下:y=-120int y=pWheel->angleDelta().y();if(y>0){ui->plainTextEdit->zoomIn();//放大}else if(y<0){ui->plainTextEdit->zoomOut();//缩小}return true;//过滤(不放行),事件在这里已经被处理了,没必要继续分发了}}}return QMainWindow::eventFilter(watched,event);
}

三.写一个给两个数进行运算的例子(自定义事件)

1.用到的组件如下

在这里插入图片描述

这里还用到了栅格布局

2.给使用的Combo Box组件(下拉框)加上计算的规则,+ - * /

在mainwindow.cpp的构造函数中写下面代码

QStringList list={"+","-","*","/"};ui->comboBox->addItems(list);

3.通过点击按钮(计算),进行计算操作

1.添加信号槽

在这里插入图片描述

2.声明槽函数(对点击按钮后做出反应的函数)

在mainwindow.h的类中

private slots://使用qt中自带的方法添加槽函数,会自动添加声明,信号与槽函数的连接也会帮你写好,这里我没有展示代码void on_pushButton_clicked();

3.创建一个类文件(用来自定义事件)

在这里插入图片描述

在这里插入图片描述

4.修改类

在myevent.h中进行的修改
在这里插入图片描述

在myevent.cpp中进行的修改

在这里插入图片描述

5.在类中添加属性

在myevent.h中的类中写下面代码

public:int m_a;int m_b;QString m_str;

6.再建一个窗口用来接收事件

1.创建窗口

在这里插入图片描述

在这里插入图片描述

2.此窗口使用的组件如下

在这里插入图片描述

3.定义一个对象

在main.cpp中写下面代码

在全局定义一个指针来指向对象

Dialog* pDlg=nullptr;

在main函数中定义对象

Dialog dia;
pDlg=&dia;//指针指向对象

7.定义槽函数

在mainwindow.cpp中写下面代码

QEvent::Type myType=QEvent::User;//自定义事件的ID  (1000)void MainWindow::on_pushButton_clicked()
{//获得两个数字 和 规则int a=ui->spinBox->value();int b=ui->spinBox_2->value();QString str=ui->comboBox->currentText();//自定义事件,并携带信息//MyEvent myEve(myType);//定义一个对象myEve.m_a=a;myEve.m_b=b;myEve.m_str=str;//发射自定义事件extern Dialog* pDlg;//外部声明,可以让变量进行跨文件使用//第一种方法//下面函数发送事件,是阻塞的,等待对方处理完毕后,再返回,继续执行下面的代码(类似于打电话)//QCoreApplication::sendEvent(pDlg,&myEve);//发送自定义事件//qDebug()<<"sendEvent over";//第二种方法MyEvent* pEve=new MyEvent(myType);//在堆区创造一个对象,防止此函数结束对象被回收pEve->m_a=a;pEve->m_b=b;pEve->m_str=str;//发送事件,非阻塞,投递完之后立即返回继续执行下面的代码(类似于发短信)QCoreApplication::postEvent(pDlg,pEve);qDebug()<<"postEvent over";
}

8.重写接收自定义事件并进行处理的函数

1.声明

在dialog.h中写下面代码

public: virtual void customEvent(QEvent *event);
2.定义

在dialog.cpp中写下面代码

void Dialog::customEvent(QEvent *event)
{extern QEvent::Type myType;//外部声明,可以让变量进行跨文件使用if(event->type()==myType){MyEvent* pEve=(MyEvent*)event;//强转为自定义事件int res=0;//结果if(pEve->m_str=="+"){res=pEve->m_a+pEve->m_b;}else if(pEve->m_str=="-"){res=pEve->m_a-pEve->m_b;}else if(pEve->m_str=="*"){res=pEve->m_a*pEve->m_b;}else if(pEve->m_str=="/"){res=pEve->m_a/pEve->m_b;}ui->label->setText(QString("规则:%1,结果%2").arg(pEve->m_str).arg(res));this->show();}qDebug()<<"处理自定义事件完毕";

相关文章:

c++ qt--事件过滤(第七部分)

c qt–事件过滤&#xff08;第七部分&#xff09; 一.为什么要用事件过滤 上一篇博客中我们用到了事件来进行一些更加细致的操作&#xff0c;如监控鼠标的按下与抬起&#xff0c;但是我们发现如果有很多的组件那每个组件都要创建一个类&#xff0c;这样就显得很麻烦&#xff…...

Inventor软件安装包分享(附安装教程)

目录 一、软件简介 二、软件下载 一、软件简介 Inventor软件是一款由Autodesk公司开发的三维计算机辅助设计&#xff08;CAD&#xff09;软件&#xff0c;主要用于机械设计和工程领域。它基于参数化建模技术&#xff0c;可以创建出复杂的三维模型&#xff0c;并且提供了丰富的…...

STM32F103 4G Cat.1模块EC200S使用

一、简介 EC200S-CN 是移远通信最近推出的 LTE Cat 1 无线通信模块&#xff0c;支持最大下行速率 10Mbps 和最大上行速率 5Mbps&#xff0c;具有超高的性价比&#xff1b;同时在封装上兼容移远通信多网络制式 LTE Standard EC2x&#xff08;EC25、EC21、EC20 R2.0、EC20 R2.1&a…...

38、springboot为 spring mvc 提供的静态资源管理,覆盖和添加静态资源目录

springboot为 spring mvc 提供的静态资源管理 ★ Spring Boot为Spring MVC提供了默认的静态资源管理&#xff1a; ▲ 默认的四个静态资源目录&#xff1a; /META-INF/resources > /resources > /static > /public ▲ ResourceProperties.java类的源代码&#xff0…...

Go 输出函数

Go语言拥有三个用于输出文本的函数&#xff1a; Print()Println()Printf() Print() 函数以其默认格式打印其参数。 示例 打印 i 和 j 的值&#xff1a; package mainimport "fmt"func main() {var i, j string "Hello", "World"fmt.Print(…...

L1-037 A除以B(Python实现) 测试点全过

题目 真的是简单题哈 —— 给定两个绝对值不超过100的整数A和B&#xff0c;要求你按照“ A / B 商 A/B商 A/B商”的格式输出结果。 输入格式 输入在第一行给出两个整数 A A A和 B &#xff08; − 100 ≤ A , B ≤ 100 &#xff09; B&#xff08;−100≤A,B≤100&#xff0…...

睿思BI旗舰版V5.3正式发布

发布时间&#xff1a;2023-7-20 主要更新内容: 1.增加3D地图功能 2.增加水球图 3.增加扇形图&#xff0c;在数据大屏 - 自定义组件中定义。 4.增加指标引导线功能&#xff0c;在数据大屏 - 自定义组件中定义。 5.详情页增加回调函数功能。 6.大屏/仪表盘模版下载&#xff0c;…...

基于Jenkins自动化部署PHP环境---基于rsync部署

基于基于Jenkins自动打包并部署Tomcat环境_学习新鲜事物的博客-CSDN博客环境 准备git仓库 [rootgit ~]# su - git 上一次登录&#xff1a;五 8月 25 15:09:12 CST 2023从 192.168.50.53pts/2 上 [gitgit ~]$ mkdir php.git [gitgit ~]$ cd php.git/ [gitgit php.git]$ git --b…...

学信息系统项目管理师第4版系列02_法律法规

1. 信息安全的法律体系可分为四个层面 1.1. 一般性法律法规&#xff0c;如宪法、国家安全法&#xff0c;国家秘密法 1.2. 规范和惩罚信息网络犯罪的法律&#xff0c;如刑法、《全国人大常委会关于维护互联网安全的决定》等 1.3. 直接针对信息安全的特别规定&#xff0c;如《…...

【大数据】Doris:基于 MPP 架构的高性能实时分析型数据库

Doris&#xff1a;基于 MPP 架构的高性能实时分析型数据库 1.Doris 介绍 Apache Doris 是一个基于 MPP&#xff08;Massively Parallel Processing&#xff0c;大规模并行处理&#xff09;架构的高性能、实时的分析型数据库&#xff0c;以极速易用的特点被人们所熟知&#xff…...

【rust/egui】(五)看看template的app.rs:SidePanel、CentralPanel以及heading

说在前面 rust新手&#xff0c;egui没啥找到啥教程&#xff0c;这里自己记录下学习过程环境&#xff1a;windows11 22H2rust版本&#xff1a;rustc 1.71.1egui版本&#xff1a;0.22.0eframe版本&#xff1a;0.22.0上一篇&#xff1a;这里 SidePanel 侧边栏&#xff0c;如下图 …...

MTK6833_MT6833核心板_天玑700安卓5G核心板规格性能介绍

MTK6833安卓核心板采用台积电 7nm 制程的5G SoC&#xff0c;2*Cortex-A766*Cortex-A55架构&#xff0c;搭载Android12.0操作系统&#xff0c;主频最高达2.2GHz 。内置 5G 双载波聚合技术&#xff08;2CC&#xff09;及双 5G SIM 卡功能&#xff0c;实现优异的功耗表现及实时连网…...

Maven-Java代码格式化插件spring-javaformat

TOC 官方文档&#xff1a;点击进入 前言 项目研发过程中&#xff0c;随着团队人员的增加变更环境配置的不同&#xff0c;有些同学甚至没有格式化代码的习惯&#xff0c;导致编码风格不统一杂乱无章&#xff0c;为解决这一问题引入Spring提供的格式化代码插件。插件支持多种方…...

设计模式之八:模板方法模式

泡咖啡和泡茶的共同点&#xff1a; 把水煮沸沸水冲泡咖啡/茶叶冲泡后的水倒入杯子添加糖和牛奶/柠檬 class CoffeineBeverage { public:void prepareRecipe(){boilWater();brew();pourInCup();addCondiments();}private:void boilWater(){std::cout << "Boiling w…...

hive可以删除单条数据吗

参考&#xff1a; hive只操作几条数据特别慢 hive可以删除单条数据吗_柳随风的技术博客_51CTO博客...

python3-Flask实现Api接口

1、&#xff1a;python3-Flask实现Api接口_flask api_Shiro to kuro的博客-CSDN博客 2、 Flask框架的web开发01&#xff08;Restful API接口规范&#xff09;_flask patch post_~须尽欢的博客-CSDN博客...

微分享 - 超实用开发日常排查问题Linux运维命令

目录 CPUCPU基本信息CPU使用情况ps 命令可用于确定哪个进程占用了 CPU 内存free 网络查看端口curl 常用命令 文件df 、du 区别磁盘使用情况文件大小文件下载压缩&解压缩查找文件查找文件内容 进程CPU 使用来升序排序内存 使用升序排序 其他常用操作系统进本信息赋予文件执行…...

Pico如何使用C/C++选择哪个I2C控制器,以及SDA和SCL针脚

本文一开始讲述了解决方案&#xff0c;后面是我做的笔记&#xff0c;用来讲述我的发现流程和探究的 Pico I2C 代码结构。 前提知识 首先要说明一点&#xff1a;Pico 有两个 I2C&#xff0c;也就是两套 SDA 和 SCL。这点你可以在针脚图中名字看出&#xff0c;比如下图的 Pin 4…...

求生之路2私人服务器开服搭建教程centos

求生之路2私人服务器开服搭建教程centos 大家好我是艾西&#xff0c;朋友想玩求生之路2(left4dead2)重回经典。Steam玩起来有时候没有那么得劲&#xff0c;于是问我有没有可能自己搭建一个玩玩。今天跟大家分享的就是求生之路2的自己用服务器搭建的一个心路历程。 &#xff0…...

Redis7之介绍(一)

1. 是什么 Redis:REmote Dictionary Server(远程字典服务器&#xff09; Remote Dictionary Server( 远程字典服务)是完全开源的&#xff0c;使用ANSIC语言编写遵守BSD协议&#xff0c;是一个高性能的Key-Value数据库提供了丰富的数据结构&#xff0c;例如String、Hash、List、…...

基于Python+djangoAI 农作物病虫害预警系统智能识别系统设计与实现(源码&教程)

1.背景 随着科技的发展&#xff0c;机器学习技术在各个领域中的应用越来越广泛。在农业领域&#xff0c;机器学习技术的应用有助于提高农作物的产量和质量&#xff0c;降低农业生产的成本。本文针对农作物健康识别问题&#xff0c;提出一种基于机器学习方法的农作健康识别系统&…...

Kotlin Flow 转换以及上下游处理

本片文章主要介绍Flow上下游处理&#xff0c;上游一个Flow使用map&#xff0c;上游两个Flow使用zip&#xff0c;上游三个Flow及以上使用combine 1、下面代码展示了upStreamFlow作为上游&#xff0c;downStreamFlow作为下游&#xff0c;通过对upStreamFlow使用map操作符函数将…...

深度学习3. 强化学习-Reinforcement learning | RL

强化学习是机器学习的一种学习方式&#xff0c;它跟监督学习、无监督学习是对应的。本文将详细介绍强化学习的基本概念、应用场景和主流的强化学习算法及分类。 目录 什么是强化学习&#xff1f; 强化学习的应用场景 强化学习的主流算法 强化学习(reinforcement learning) …...

TCP/IP网络江湖武艺传承:物理层与通信江湖的幕后

目录 〇、引言:进入现代通信技术的江湖 一、数字信号与模拟信号:传承与差异...

智慧能源管理系统助力某制造企业提高能源利用效率

随着全球能源需求不断增加和能源价格的上涨&#xff0c;企业和机构日益意识到能源管理的重要性。传统的能源管理方式不仅效率低下&#xff0c;还容易造成资源浪费和环境污染。因此&#xff0c;许多企业开始探索采用智慧能源管理系统来提高能源利用效率&#xff0c;降低能源成本…...

opencv/C++ 人脸检测

前言 本文使用的测试资源说明&#xff1a; opencv版本&#xff1a;opencv 4.6.0 人脸检测算法 Haar特征分类器 Haar特征分类器是一个XML文件&#xff0c;描述了人体各个部位的Haar特征值。包括&#xff1a;人脸、眼睛、鼻子、嘴等。 opencv 4.6.0自带的Haar特征分类器&…...

UE4/5的Custom节点:在VScode使用HLSL(新手入门用)

目录 custom节点 VSCode环境安装 将VSCode里面的代码放入Custom中 custom节点 可以看到这是一个简单的Custom节点&#xff1a; 而里面是可以填写代码的&#xff1a; 但是在这里面去写代码会发现十分的繁琐【按下enter后&#xff0c;不会换行&#xff0c;也不会自动缩进】 …...

小研究 - J2EE 应用服务器的软件老化测试研究

软件老化现象是影响软件可靠性的重要因素&#xff0c;长期运行的软件系统存在软件老化现象&#xff0c;这将影响整个业务系统的正常运行&#xff0c;给企事业单位带来无可估量的经济损失。软件老化出现的主要原因是操作系统资源消耗殆尽&#xff0c;导致应用系统的性能下降甚至…...

Tomcat和Servlet基础知识的讲解(JavaEE初阶系列16)

目录 前言&#xff1a; 1.Tomcat 1.1Tomcat是什么 1.2下载安装 2.Servlet 2.1什么是Servlet 2.2使用Servlet来编写一个“hello world” 1.2.1创建项目&#xff08;Maven&#xff09; 1.2.2引入依赖&#xff08;Servlet&#xff09; 1.2.3创建目录&#xff08;webapp&a…...

开源在大数据和分析中的角色

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…...

yandex网站推广/网站推广优化业务

事件与消息的区别 在osal中 事件是驱动任务去执行某些操作的条件&#xff0c;当系统中产生一个事件&#xff0c;OSAL将这个事件传递给相应任务后&#xff0c;任务才能执行一个相应的操作&#xff08;传递这个行为是通过调用轮训函数实现&#xff0c;完成操作时通过时间处理函数…...

网站解析出问题 邮件收不到了/seo搜索推广

转自作者&#xff1a;听海8 -点击可查看原文 1.1 进阶篇案例一 案例&#xff1a;爬取豆瓣电影 top250( movie.douban.com/top250 )的电影数据&#xff0c;并保存在 MongoDB 中。 案例步骤&#xff1a; 第一步&#xff1a;明确爬虫需要爬取的内容。 我们做爬虫的时候&#…...

湖南网站建设的公司排名/搭建网站的步骤

吃瓜笔记《机器学习》周志华——第五章 神经网络 5.1神经元模型 神经网络&#xff1a;具有适应性的简单单元组成的广泛并行互连的网络&#xff0c;它的组织能够模拟生物神经系统对真实世界物体所作出的交互反应。 神经元模型&#xff1a;一个_神经元_收到的刺激超过阈值&…...

中国郑州建设信息网站/seo常见的优化技术

recordidunitnameunittypenote1只1 10颗4 100根4 101请录入名称0请录入备注1020请录入备注10301040请录入备注11本4 12台4 13罐protected void gvTest_DataBound(object sender, EventArgs e) { gvTest.Rows[3].Cells[1].RowSpan 4; //请录入名称 跨4行 …...

网站title keywords/哪个平台推广效果最好

part 1Java基础核心技术总结 万事都离不开根基&#xff0c;Java基础对于一些老鸟来说可能已经很熟悉了&#xff0c;但是对于很多开发5年以下的朋友掌握的或许不是很牢固&#xff0c;因此这份笔记更适合温故而知新。 Part 2并发编程&#xff08;架构师筑基必备&#xff09; 并发…...

自适应网站ui做几套/福州seo优化排名推广

由于工作上需要实现公历转换农历.以及农历转换成公历.还有农历公历二级联动.特封装了这个转换函数. 有个函数的对照表对于农历的联动也很容易实现了. // JS日历转化公用类 // date 2010-06-01function tagLunarCal( d, i, w, k, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m1…...