Qt event()

virtual bool event(QEvent *e)
是QObject的成员函数,可以重载

例如在QWidget中的作用是用来将事件分配给各个事件处理函数的
方法是
1.通过参数e->type()判断出传递过来的事件类型是什么
2.例如是QEvent::MouseMove,在通过强制转换auto temp_ev = static_cast<QMouseEvent*>(e),转换成对应的事件参数,这样调用MouseMoveEvent(temp.ev);就相当于分配好了
3.其实在通过转换的事件参数temp_ev后,可以取出更具体的参数,temp_ev->pos(),等等,可以做更详细的处理

其实这些处理都围绕着参数Qevent *e的处理,是否要自己处理,是否要发给其他函数处理

在自定义的子类中

bool Widget::event(QEvent *event)
{
    if(event->type() == QEvent::KeyPress)  //键盘按下处理,其他事件让事件处理器自己处理,不能返回false
    {
        QKeyEvent *e = static_cast<QKeyEvent *>(event);//把QEvent类型转为QKeyEvent
 
        if(e->key() == Qt::Key_B) //如果是 键盘上的B键 将不会打印键值
        {
            return QWidget::event(event);
        }
 
        qDebug()<<(char)(e->key());
        return true;
    }
    else if(event->type() == QEvent::Timer)//计数器事件
    {
        //此处添加处理定时器事件的内容,如果想干掉定时器就直接返回true 定时器事件就不会处理
        QTimerEvent *ev = static_cast<QTimerEvent *>(event);//把QEvent类型转换为QTimerEvent
        timerEvent(ev);
        return true; //如果返回true,事件停止传播
    }
    else if(event->type() == QEvent::MouseMove)//鼠标移动事件  ,需要在构造函数中设置追踪鼠标
    {
        //鼠标移动处理事件,当返回true时就停止事件处理,所以在返回true前处理事件,打印坐标
        QMouseEvent *ev = static_cast<QMouseEvent *>(event);//把QEvent类型转换为QMouseEvent
        qDebug()<<QString("Mouse Move:(%1, %2)").arg(ev->x()).arg(ev->y());
        return true; //如果返回true,事件停止传播
    }
    else
    {
        return QWidget::event(event);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值