11

これは2日以上私を悩ませているので、私は尋ねるべきだと思いました. Win7 で Qt 4.5.3 (VC2008 でコンパイル) を使用しています。

MyGraphicsView (QGraphicsView を継承) および MyFilter (QObject を継承) クラスがあります。

MyFilter オブジェクトをイベント フィルターとして MyGraphicsView にインストールすると、マウス イベントは MyGraphicsView に配信されたに MyFilter に配信されますが、Key イベントは MyGraphicsView に配信されるに MyFilter に配信されます。

2 番目のケースでは、MyFilter オブジェクトをイベント フィルターとして MyGraphicsView->viewport() (標準の QGLWidget) にインストールします。マウス イベントは MyGraphicsView に配信されるに MyFilter に配信されますが、Key イベントはMyGraphicsViewにのみ配信されます。 .

イベントは、実際のオブジェクトに配信される前にイベント フィルターに配信されるはずですが、なぜそうなるのでしょうか? この注文を確実にするにはどうすればよいですか?

前もって感謝します。よろしくお願いします。

4

2 に答える 2

-2

フィルターを使用せずに、次のように MyGraphicsView で必要な QEvent ハンドラーを再実装してみてはどうでしょうか。

void MyGraphicsView::mousePressEvent(QMouseEvent* pe)
{
if (pe->buttons() & Qt::LeftButton)
{
    this->setCursor(Qt::CrossCursor);
    zoomOrigin = pe->pos();
    rubberBand = new QRubberBand(QRubberBand::Rectangle, this);
    rubberBand->setGeometry(QRect(zoomOrigin, QSize(0,0)));
    rubberBand->show();
}
if (pe->buttons() & Qt::MidButton)
{
    panOrigin = pe->pos();
        this->setCursor(Qt::ClosedHandCursor);
}
}
于 2010-03-19T08:19:38.880 に答える