シンプルな 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() 内に実装する必要があるものはありますか?
ありがとう。