0

から継承するクラスと、から継承するQGraphicItems別のクラスがありQGraphicsSceneます。カスタム アイテムを作成し、カスタム シーンに配置しました。ここに私のイベントハンドラ関数があります:

void Panel::mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent)
{
    if (mouseEvent->button() != Qt::LeftButton)
        return;
    //my code 

    QGraphicsScene::mousePressEvent(mouseEvent);
}

void Panel::mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent)
{
    //my code 

    QGraphicsScene::mouseMoveEvent(mouseEvent);
}

void Panel::mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent)
{
    //my code

    QGraphicsScene::mouseReleaseEvent(mouseEvent);
}

ただし、これらのイベントは呼び出されないようです。DiagramSceneコードは Qtの例に基づいていますが、主な違いは、項目がQGraphicsItemではなくから継承されていることですQGraphicsPolygonItem

イベントを適切に処理するにはどうすればよいですか?

4

1 に答える 1

1

の実装では、独自のコードがイベントを処理した後にPanel::mousePressEvent()呼び出すことになります。QGraphicsScene::mousePressEvent()のデフォルトの実装は、QGraphicsScene::mousePressEvent()おそらく、独自のコードで実行したことを元に戻します。例として、 のデフォルトの実装は、QGraphicsScene::mousePressEvent()マウス イベントを受け入れる最上位のアイテムにイベントを転送し、そのアイテムがマウス グラバーになります。あなたのコードが、別のオブジェクトがグラバーになるような他のことが起こることを期待している場合 (あなたが投稿した限られたコードからはわかりません)、基本クラスへの呼び出しはあなたがしたことを元に戻します.

カスタムの方法でイベントを自分で処理したい場合は、基本クラスのイベント ハンドラーを呼び出さないでください。

于 2013-01-04T20:15:00.947 に答える