[Qt][Qt 事件][下]详细讲解
{
void MyLabel::mousePressEvent(QMouseEvent* event)
{
QString str = QString("鼠标按下: x = %1, y = %2").
arg(event->x()).arg(event->y());
qDebug() << str.toUtf8().data();
}
void MyLabel::event(QEvent* ev)
{
if(ev->type() == QEvent::MouseButtonPress)
{
QMouseEvent* event = static_cast<QMouseEvent* e>(e);
QString str = QString("event中鼠标按下: x = %1, y = %2").
arg(event->x()).arg(event->y());
qDebug() << str.toUtf8().data();
return true; // 返回true,代表拦截,不向下分发
}
// 其他事件交给父类处理(默认处理)
return QWidget::event(ev);
}
}
----------------------------------------------------------------------
{
// Widget构造函数中
{
// 步骤1:给label安装事件过滤器 this:当前窗口安装事件过滤器
ui->label->installEventFilter(this);
}
// 步骤2:重写eventFilter事件
bool Widget::eventFilter(QObject* obj, QEvent* e)
{
if(obj == ui->label) // 判断控件
{
if(e->type == QEvent::MouseButtonPress)
{
QMouseEvent* event = static_cast<QMouseEvent* e>(e);
QString str = QString("事件过滤器中鼠标按下: x = %1, y = %2").
arg(event->x()).arg(event->y());
qDebug() << str.toUtf8().data();
return true;
}
}
// 其他事件交给父类处理
return QWidget::event(ev);
}
}