0

シンプルな QGraphicsWidget、MyGraphicsWidget があります。これが私の mouseMoveEvent() です。これは正常に動作しているようです:

void MyGraphicsWidget::mouseMoveEvent (QGraphicsSceneMouseEvent *event)
{
    QPointF p = event->scenePos() - m_StartPos;
    if(p.manhattanLength() < 20)
        return;
    //omitted drawing a rounded rect on the drag
    QDrag *drag = new QDrag(event->widget());
    drag->start(Qt::MoveAction);
}

シーンの dropEvent() は、このウィジェットを新しい位置に移動するだけで、シーン自体にはプレス/移動イベントがないため、それらは内部のウィジェットに正しく渡されるはずです。

ただし、ドラッグが完了すると、次にマウスを押すとこのウィジェットになります。そのため、別のウィジェットをクリックしてドラッグしようとすると、カーソルがこのウィジェット上にないにもかかわらず、誤ってこのウィジェットをドラッグしてしまうことになります。event->pos() と event->scenePos() を出力しましたが、どちらもカーソルが表示されている場所にあることを報告しました (ウィジェット上ではまったくありません)。クリックしてドラッグする前に一度クリックすると、すべてが正常に機能します。mouseReleaseEvent() または私の mouseMoveEvent() 内に実装する必要があるものはありますか?

ありがとう。

4

1 に答える 1

0

それは今働いています。これが問題だったと確信しています: MyGraphicsWidget には別のカスタム GraphicsWidget がその上にあり、その mousePressEvent で QGraphicsWidget::mousePressEvent(event); を呼び出していました。イベント開始時。イベントの残りの部分はトリガーされず、すべてが台無しになりました。その行をメソッドの最後に移動しましたが、すべて問題ないようです。

于 2012-12-14T21:15:03.773 に答える