首页 > 其他分享 >Qt 事件过滤器

Qt 事件过滤器

时间:2022-09-21 23:55:34浏览次数:84  
标签:控件 Qt 处理 事件 按钮 过滤器

目录

 


分析

现在有这样一个场景,界面中有三个按钮,分别实现三个按钮对应槽函数,正常情况下点击是这样的
在这里插入图片描述
现在来使用事件过滤的方式使按钮2的点击失效

在此之前需要知道事件的传递流
以鼠标点击事件为例,当界面中产生一个鼠标点击事件,经过一系列乱七八糟的处理,事件来到Qt事件分发器事件分发器一看是按钮的事件嘛,然后就把事件交给按钮处理,按钮一看"哦,事件来了啊,赶紧处理,抛个信号完事"

整个事件的流程大致就是这样

        事件产生 ... Qt事件分发器 按钮 处理

那什么时候用到事件过滤器呢?
试想上面的场景本来一切正常,突然有一天,按钮说"996太累了,widget你能不能帮我干一部分活",widget也是个职场老油条了,心说帮你干活可以,但是你得给我留个条,说”行,但是我怕我忘了,你给我写个条吧(安装事件过滤器)“
于是流程又变成了这样

处理安装了过滤器的控件的事件             widget 事件过滤器 事件产生 ... Qt事件分发器 按钮 处理

代码

一、控件安装事件过滤器

	// 按钮2先安装事件过滤器,指定一个对象,事件产生后会先交给指定的对象处理
	ui.btn2->installEventFilter(this);

二、在过滤器中实现事件过滤事件

事件进入到事件过滤器中,进行自己想要的处理,返回true表示事件标记为处理完毕,那么事件将不会继续向下传递,返回false则反之
最后如果自己不做处理的事件,别忘了交给父对象处理,

bool test::eventFilter(QObject *watched, QEvent *event)
{
		if (ui.btn2 == watched)
	{
		if (QEvent::MouseButtonPress == event->type())
		{
			qDebug() << QStringLiteral("鼠标按下事件,已拦截");
			return true;
		}
		else if (QEvent::MouseButtonRelease == event->type())
		{
			qDebug() << QStringLiteral("鼠标释放事件,已拦截");
			return true;
		}
		else if (QEvent::MouseButtonDblClick == event->type())
		{
			qDebug() << QStringLiteral("鼠标双击事件,已拦截");
			return true;
		}
	}
	// 将事件交给父对象处理
	return QWidget::eventFilter(watched, event);
}

效果

在这里插入图片描述

总结

说白了事件过滤器就是自己不想处理的事件,交给别人来处理

我不想上班,谁能帮我上啊
在这里插入图片描述

做一条有理想的咸鱼

标签:控件,Qt,处理,事件,按钮,过滤器
From: https://www.cnblogs.com/chinasoft/p/16717685.html

相关文章

  • 【代码片段】Qt6.2.4 C++种的信号和槽
    参考https://www.bilibili.com/video/BV14t411b7EL?p=5注意对于哪里需要用到指针,哪里需要地址还不是很明白,逻辑可以参考环境环境版本windows10QT6.2.......
  • 【代码片段】Qt6.2.4 获取文件 MD5
    参考https://www.bilibili.com/video/BV14t411b7EL环境环境版本windows10QT6.2.4QtCreator8.0.1(Community)qmake代码段第一种一次性......
  • 前端怎么对一张图片特定某些点进行点击事件(image-map)
    图片热区技术插入一张图片,并设置好图像的有关参数,在<img>标记中设置参数usemap="#image-map",以表示对图像地图的引用。用<map>标记设定图像地图的作用区域,并取名:image-ma......
  • Qt事件exec, eventloop
    1、事件循环一般用exec()函数开启。QApplicaion::exec()、QMessageBox::exec()都是事件循环。其中前者又被称为主事件循环。事件循环首先是一个无限“循环”,程序在exec()......
  • 【Java UI】HarmonyOS添加日历事件
    ​参考资料CalendarDataHelperEventsRemindersapi讲解添加权限在config.json添加权限代码如下"reqPermissions":[{"name":"ohos.permission.RE......
  • PyQt完整入门教程
    PyQt完整入门教程https://blog.csdn.net/baidu_37503452?spm=1000.2115.3001.53431、GUI开发框架简介19年来,一直在做AndroidROM相关测试,也有了一定的积累;20年......
  • 昨天学习:宏任务与微任务,JS执行机制,执行栈,事件循环,同步异步执行顺序
    宏任务由宿主(浏览器,Node)发起;微任务由JS本身发起。宏任务的具体事件为scrpit(整体代码),setTimeout,setInterval,等。微任务的具体事件为Promise,等。JS执行机制:先处理主线程上......
  • c#基础知识之自定义事件
    自定义事件为了让大家多了解一下关于c#的用法,我开始给大家讲解一下关于c#的一些重要用法,想学的大家也常来参与一下,只要技术够硬,赚钱多多,财富多多,幸福多多,只要想学都都可以......
  • Qt显示中文
    当航至【C/C++】—>【命令行】—>【其他选项】,添加以下参数:/execution-charset:utf-8参考:/execution-charset(Setexecutioncharacterset)/utf-8(Setsourceande......
  • Qt官方示例Demo介绍 以及 Qt Examples and Demos(Qt的例子和演示)(转)
    Qt官方示例Demo介绍:https://blog.csdn.net/qq582880551/article/details/123313751QtExamplesandDemos(Qt的例子和演示):https://blog.csdn.net/luoting2017/article/......