3

QtのQGraphicsSceneは、すぐに使用できるいくつかの優れた機能を提供します。ユーザーはオブジェクトを選択して移動できます。

もう1つ必要なのは、ユーザーがオブジェクトの移動を終了したときに通知を受け取ることです。マウスの移動、プレス、リリースなどの低レベルのイベントがありますが、すでに存在する機能(オブジェクトの移動)を再実装したくありません。

http://doc.trolltech.com/4.2/qgraphicsitem.html#itemChangeメソッドはそのように見えますが、ユーザーがオブジェクトを移動したときに呼び出されません。

Qt4.6を使用しています

このイベントを有効にするには、フラグを設定する必要があります。item-> setFlag(QGraphicsItem :: ItemSendsGeometryChanges、true);

しかし今では、アイテムのコーディネイトが変更されるたびにイベントが発生します。ユーザーが変更を加えた場合にのみイベントを開催したい。

4

2 に答える 2

1

常にmouseReleaseEventを取得するとは限らないため、常に機能するとは限らないことを除いて...

ただし、ドラッグを実行しているコードはブロックコードです。コードはマウスボタンを離した後にのみ続行され、常に機能するため、そこに配置できます...(QT 4.7+)

于 2012-02-05T03:04:05.057 に答える
1

アイテムにmouseReleaseイベントを実装するのが最善の方法だと思います。起動すると、アイテムが移動したかどうかを知ることができます。アイテムが移動された場合はイベントを受け入れ、そうでない場合はイベントを基本クラスに送信します。

例えば:

 void YourItem::mouseReleaseEvent(QMouseEvent *event)
 {
     if (wasMoved()) {
         //do something and accept the event
     } else {
         // to the base class
         QGraphicsItem::mouseReleaseEvent(event);
     }
 }

WasMoved()は、アイテムが移動されたかどうかを知るためのメソッドです

于 2010-01-05T14:46:15.443 に答える