持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第4天,点击查看活动详情
前言
在使用connect时,各个槽函数所响应的顺序按照一定的优先级顺序调用。与此同时,如果对接下来所响应的槽函数所对应的对象进行隐藏的话,他的槽函数不会运行(控件隐藏以后 相当于删除了这个控件 后续如果对这个控件在进行除了show之外别的操作 控件不会执行)。因此,我们可以通过eventFilter事件过滤器来实现隐藏控件的槽函数操作。
解释
事件过滤器(即eventFilter)是第一个接收到事件发生的,在没有对时间过滤器内部做重载操作的时候,事件才会再发送到各个部件的event所对应得函数,在进行调用操作事件处理,但是如果有重载,就会先调用事件过滤器中多对应的函数。
virtual bool eventFilter(QObject * watched, QEvent * event);//重载过滤器--响应标签点击消息
第一个参数是 所对应的控件 第二个参数是所对应的信号
eventFilter的返回值如果为TRUE 则该事件被拦截 原来的槽函数不会继续响应。
如果同一个对象上安装多个事件过滤器,最后一个过滤器会首先被激活调用,就像是把所有的时间过滤器装进了栈中。
如果在eventFilter函数中删除了接收事件的对象,请确保eventFilter函数返回true,否则Qt将会发送事件到删除的接收对象上,这将导致程序崩溃。(不理解)
按钮的信号:
MouseButtonDblClick 双击
MouseButtonPress 按钮按下
MouseButtonRelease 按钮释放
Ui->btn->installEventFilter(this); 在对象上安装一个事件过滤器
Ui->btn->installEventFilter(keyPressEater );
在触发keyPressEater类中的事件,会被eventFilter函数拦截
installEventFilter和eventFilter配合使用的,并且在使用过程中,filter对象和槽函数的对象必须在同一个线程中,否则不会被成功调用。