Qt5.0事件过滤器单击鼠标即可多次调用事件过滤器

时间:2013-01-25 09:39:54

标签: qt mouseevent

我在Qt5.0中有一个应用程序,我在其中安装了一个事件过滤器来监听单击鼠标,如下所示:

bool MainView::eventFilter(QObject *obj, QEvent *event)
{
if (event->type() == QEvent::MouseButtonPress)
  {
    QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
    int mx=mouseEvent->pos().x(),my=mouseEvent->pos().y();

    qDebug() << QString::number(mx)<<" "<<QString::number(my);
...
}
}

每次点击,该函数都会被多次调用,并返回大范围内的多个值,通常在与实际值相差+/- 50的范围内。任何人都可以解释为什么会发生这种情况或者是否有人遇到过类似的问题。事件过滤器已在构造函数中安装为qApp-&gt; installEventFilter(this);

1 个答案:

答案 0 :(得分:5)

如果事件尚未被对象处理,则它将传播到对象的父对象,依此类推。这就是你捕获几个鼠标事件的原因。

您可以随时获取事件过滤器正在监视的对象:

bool MainView::eventFilter(QObject *obj, QEvent *event)
{
    ...
    qDebug() << obj->metaObject()->className();
    ...
}