Qt事件过滤器的使用

Qt事件过滤器的使用


事件过滤器事件:void QObject::installEventFilter( QObject *filterObj ),示例:

monitoredObj->installEventFilter( filterObj );

继承自QObject类的对象都可以安装事件过滤器,也就是说 mobitoredObj、filterObj 这两个对象必须都继承自QObject类。filterObj 对象会接收所有发送给 monintoredObj 对象的事件,并在 eventFilter() 函数中处理,也就是说要在 filterObj 对象的类中定义实现 eventFilter() 函数。eventFilter() 函数原型为:

virtual bool eventFilter( QObject *obj, QEvent *e );

eventFilter() 函数中可以选择结束事件(即过滤掉事件),也可以继续向前传递事件给 monitoredObj 对象。

下面给出Qt帮助文档中的代码示例

class KeyPressEater : public QObject
{
       Q_OBJECT

protected:
       bool eventFilter(  QObject *obj, QEvent *event );
}

bool KeyPreeEater::eventFilter( QObject *obj, QEvent *event )
{
       if( event->type() == QEvent::KeyPress ) {
               QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
               qDebug( "Ate key press %d", keyEvent->key() );
               return true;//事件结束
        } else {
               return QObject::eventFilter( obj, event );//事件传递给 monitoredObj 对象
       }
}

安装过滤器步骤:

KeyPressEater *keyPressEater = new KeyPressEater( this );
QPushButton *pushButton = new QPushButton( this );
QListView *listView = new QListView( this );

pushButton->installEventFilter( keyPressEater );//安装过滤器后 keyPressEater 对象可以接收 pushButton 对象的所有事件,并在 KeyPressEater::eventFilter( QObject *obj, QEvent *event ) 函数中处理。
listView->installEventFilter( keyPressEater );

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值