2017-02-14 3 views
0

私はユーザーがQGraphicsSceneをズームしてドラッグできるようにしたいので、単にQGraphicsViewをロックすることはできません。 ただし、ユーザはQGraphicsItemをシーンビューポートからドラッグできないようにしてください。したがって、DragMoveEvent(別名QGraphicsItemの原点に戻る)を無視せずにMouseDragEventを中断する方法を探しています。私はreleaseMouse()関数を使用してこの動作を達成しようとしましたが、それはまったく動作しませんでした。助言がありますか?Qtでマウスをプログラムでドラッグするのを中断する方法はありますか?

ありがとうございます!

+0

Qtについてはわかりませんが、Win32 APIでSetCaptureとClipCursorをチェックしてください。 –

+0

http://stackoverflow.com/questions/11172420/moving-object-with-mouse この目的のためにmouseMoveEventをオーバーライドできますか? – Hafnernuss

+0

*シーンのビューポートからQGraphicsItemをドラッグする* - QGraphicsItemはQGraphicsSceneにあり、シーンのビューポートからドラッグすることはできません。 – TheDarkKnight

答えて

1

qtグラフィックシーンビューフレームの作業とドラッグを扱う場合は、マウスを直接扱うよりもQGraphicsItemand :: itemChangeを再実装する方がよいでしょう。

protected: 
virtual QVariant itemChange(GraphicsItemChange change, const QVariant & value); 

は次に機能で、あなたは位置の変化を検出し、必要に応じて新しい位置を返します。

これは、ヘッダファイルで定義された関数です。

QVariant YourItemItem::itemChange(GraphicsItemChange change, const QVariant & value) 
{ 
    if (change == ItemPositionChange && scene()) 
    { 
      QPointF newPos = value.toPointF(); // check if this position is out bound 

    { 
     if (newPos.x() < xmin) newPos.setX(xmin); 
     if (newPos.x() > xmax) newPos.setX(xmax); 
     if (newPos.y() < ymin) newPos.setY(ymin); 
     if (newPos.y() > ymax) newPos.setY(ymax); 
     return newPos; 
    } 

    ... 
} 

このような何かが考えられます。

関連する問題