事件分发器
//事件分发器
bool event(QEvent* e);
//事件分发器::用途 分发事件
bool MyLabel::event(QEvent* e)
{
if(e->type() == QEvent::MouseButtonPress)
{
//如果是鼠标摁下 拦截事件 不向下分发
QMouseEvent* ev = static_cast<QMouseEvent*>(e);
QString str = QString("event中鼠标按下 x = %1, y = %2").arg(ev->x()).arg(ev->y());
qDebug() << str;
return true;
}
//其他事件 抛给父类
return QLabel::event(e);
}
事件过滤器
第一步给控件安装事件过滤器
第二步重写过滤器事件
bool Widget::eventFilter(QObject* obj, QEvent* e)
{
if(obj == ui->label)
{
if(e->type() == QEvent::MouseButtonPress)
{
//如果是鼠标摁下 拦截事件 不向下分发
QMouseEvent* ev = static_cast<QMouseEvent*>(e);
QString str = QString("事件过滤器中鼠标按下 x = %1, y = %2").arg(ev->x()).arg(ev->y());
qDebug() << str;
return true;
}
}
return QWidget::eventFilter(obj, e);
}