QGraphicsSceneレポートアイテムの移動イベントを取得する方法
-
18-09-2019 - |
質問
QtのQGraphicsSceneは、ボックスの外にいくつかの素晴らしい機能を提供します。ユーザーは、オブジェクトを選択し、それらを周りに移動することができます。
。私は1つのより多くの事をしたい - ユーザーがオブジェクトを移動し終えたときに通知を取得します。 そこにマウスを移動、プレス、リリースのような低レベルのイベントは、ですが、私は(オブジェクトの移動)がすでにある機能を再実装するようにしないと思います。
http://doc.trolltech.com/4.2/qgraphicsitem.html# itemChange の方法はそれのように見えますが、ユーザーがオブジェクトを移動させたときに呼び出されません。
私はQtの4.6を使用しています。
それはあなたがこのイベントを有効にするためにフラグを設定する必要が判明します: アイテム - > SETFLAG(QGraphicsItem :: ItemSendsGeometryChanges、真の);
しかし、今イベントは、アイテムのcorrdinatesが変わるたびに発射されます。私は、変更がユーザーによって行われているイベントのみを持っていると思います。
解決
私はあなたがアイテムが移動されたかどうかを知ることができるようになります発射されたときに最良の方法は、あなたのアイテムのmouseReleaseイベントを実施していると思います。アイテムがイベントを受け入れる移動された場合は、他の基底クラスにイベントを送信ます。
例
void YourItem::mouseReleaseEvent(QMouseEvent *event)
{
if (wasMoved()) {
//do something and accept the event
} else {
// to the base class
QGraphicsItem::mouseReleaseEvent(event);
}
}
WasMoved()アイテムが移動されたかどうかを知るためにあなたの方法である。
他のヒント
あなたが常に取得しないよう、それは常に動作しないことを除いてmouseReleaseEvent ...
あなたがマウスボタンをリリースし、それは常に動作します後のコードは唯一続けると(QT 4.7 +)
...、ドラッグをやっているコードは、しかし、コードをブロックしているので、あなたがそこにそれを置くことができます