1

我在 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->installEventFilter(this); 安装在构造函数中;

4

1 回答 1

6

如果事件尚未由对象处理,则将其传播到对象的父对象,依此类推。这就是为什么你会捕捉到几个鼠标事件。

你总是可以得到事件过滤器正在监视什么样的对象:

bool MainView::eventFilter(QObject *obj, QEvent *event)
{
    ...
    qDebug() << obj->metaObject()->className();
    ...
}
于 2013-01-25T10:02:29.013 回答