2

QGraphicsScene に QGraphicsItem のマトリックスがあり、要素をクリックすると色が変わります。これは で実装されmousePressEvent()ます。クリックしたままにして、カーソルを他の QGraphicsItem の上に移動し、それらの色も変更できるようにしたいので、mousePressEvent().

問題は、マウスが最初の要素をつかむため、クリックするとすべてのイベントが「保持」され、hoverEnterEvent()トリガーされないことです。に追加しようとしungrabMouse()ましmousePressEvent()たが、役に立ちませんでした。

1 つの解決策は、QGraphicsitem をドラッグ可能にし、そのために QT ドラッグ アンド ドロップ機能を使用することだと思います。実際、私はこれを持っています:

void dragEnterEvent(QGraphicsSceneDragDropEvent *event)
{
    changeColor();
}

アプリケーションから要素の上にテキストをドラッグすると、希望どおりに機能しますが、QGraphicsItem を「ドラッグ」すると機能しません。

QGraphicsItem をドラッグ可能にして、クリックしたマウス ボタンでホバーしながらイベントをトリガーできるようにする唯一の解決策はありますか?

4

2 に答える 2

2

私は自分で解決策を見つけました。すべての QGraphicsRectItem を QGraphicsItemGroup に追加し、このグループのイベントを実装しました。Group::MouseMoveEvent() では、カーソルの位置を確認し、イベントをその子に適用します。次のようになります。

void Group::mouseMoveEvent ( QGraphicsSceneMouseEvent * event )
{
    if (boundingRect().adjusted(0,0,-1,-1).contains(event->pos()))
    {
        if (CellCoordinate(event->pos()) != lastChangedCell_) {
            lastChangedCell_ = CellCoordinate(event->pos());
            modifyCell(CellCoordinate(event->pos()));
        }
    }
}

同じ問題があり、さらに情報が必要な場合は、お気軽にお問い合わせください。

于 2010-11-29T23:26:58.233 に答える
1

を使用することをお勧めしmouseMoveEvent()ます。

編集:mouseMoveEvent()親のQGraphicsView.

于 2010-11-17T17:53:44.097 に答える