在Qt中,假如我们对APP做一个点击操作,这个点击操作可能会调动起某几个函数或方法。点击操作就属于一个事件,那么这个事件是如何与对应的函数联系起来呢?在Qt中是通过event()方法,去实现事件的分发,事件与对应的函数联系起来。
event()的返回值是bool类型,默认的返回值的false,表示事件需要被分发。如果返回值是true的话,就表示事件不会往下分发,而是被拦截起来。
Qt中的事件很多,就比如通过鼠标完成的事件,就有很多个,所以如果要拦截的话,拦截操作一般需要自己写,如下所示。先判断事件的类型,如果是需要拦截的类型,我们对它进行处理,对于不拦截的操作,用对应的默认函数去处理其它事件即可。
需要注意的是,拦截不是我们的目的,我们的目的是让大家明白,Qt中是通过event(),去分发事件的。
bool myLable::event(QEvent *e)
{
//如果事件的类型是鼠标按下,则对此事件进行拦截
if(e->type()==QEvent::MouseButtonPress)
{
QMouseEvent* ev= static_cast<QMouseEvent *>(e);//c++静态类型转换
QString str = QString("QTEVENT::鼠标按下了 x = %1 y = %2").arg(ev->x()).arg(ev->y());
qDebug()<<str;
return true;//event事件返回true,拦截后续的操作
}
return QLabel::event(e);//对于其它事件,使用QQLabel下的event()进行处理
}