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 に答える