在程序把事件分发给event()之前,还可以通过事件过滤器做拦截操作。
步骤:
- 给控件安装事件过滤器
重写事件过滤器eventfiliter函数(obj,ev)
//步骤1:重写事件过滤器
ui->label->installEventFilter(this);
//步骤2 重写事件过滤器
bool Widget::eventFilter(QObject *obj, QEvent *e)
{
if(obj==ui->label)
{
if(e->type()==QEvent::MouseButtonPress)
{
QMouseEvent* ev= static_cast<QMouseEvent *>(e);//c++静态类型转换
QString str = QString("事件过滤器下::鼠标按下了 x = %1 y = %2").arg(ev->x()).arg(ev->y());
qDebug()<<str;
return true;//event事件返回true,拦截后续的操作
}
}
//其它默认处理
return QWidget::eventFilter(obj,e);
}