[Qt][Qt 事件][下]详细讲解

时间:2025-01-28 08:40:58
{ 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); } }