qt 事件传递过程

69 篇文章 12 订阅

使用版本qt5.11

查看事件传递过程最简单的方式就是将传递过程打印出来。操作如下:(很简单的代码可以自己创建最简工程然后按如下方式添加进去)

给application 安装eventfilter后,看了下qt的事件 传递过程。如下一个按键一个按键事件的处理。

class EventFilter:public QObject{
    virtual bool eventFilter(QObject *watched, QEvent *event) override
    {
        if(event->type()== QEvent::KeyPress)
        {
            qDebug() << watched->objectName()<<"  "<<watched->metaObject()->className()<<"  "<<event->type();
        }
        return QObject::eventFilter(watched,event);
    }
}

 

如果在eventfilter 中对event处理后不返回false,事件会从继续传递,首先到接收事件的对象,再给其父对象,逐层递归。正常的所有的事件都能在父对象中通过重载的各种事件处理接口获取到事件,如 keypressevent(QKeyEvent *event) ,mouseMoveEvent(QMouse*event);。

从上面圈出的地方可以看出,qt所有的窗体有一个 隐藏的父窗体对象,该对象用于向程序中其他对象分发事件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值