3

QGraphicsWidgetでマウスドラッグを実装するには?

で試しました

setFlag(QGraphicsItem::ItemIsMovable);

そして、それはいつかうまくいきます(?)

ここに画像の説明を入力

たとえば、ノード 6 はマウスで移動できますが、残りのノードは移動しません。

また、ノードを移動すると、そのノードに接続されているエッジも一緒に移動するように実装するにはどうすればよいですか。

4

2 に答える 2

0

setFlag(QGraphicsItem::ItemIsMovable) は、マウスで QGraphicsItem をドラッグ可能にするために必要なすべてのはずです。コードをチェックして、他のオブジェクトのどこかでそのフラグを誤って設定解除していないか、またはそのようなことを確認することをお勧めします。(また、QGraphicsEllipseItem のような提供されたサブクラスの 1 つからではなく、QGraphicsItem から直接サブクラス化する場合は、contains() および boundingRect() メソッドが正しい結果を返すことを確認してください)

接続されたエッジをノードと一緒に移動させることに関しては、独自のコードでそれを行う必要があると思います。特に、関連付けられた 1 つ以上のエッジ オブジェクトを持つ任意のノードで setFlag(QGraphicsItem::ItemSendsScenePositionChanges) を呼び出します。次に、ノードを実装する QGraphicsItem サブクラスで、QVariant itemChange(GraphicsItemChange, const QVariant &)メソッドをオーバーライドします。そのメソッドの実装では、最初の引数の値が QGraphicsItem::ItemScenePositionHasChanged と等しい場合を監視し、等しい場合は、関連するエッジ オブジェクトを更新して、適切なエンドポイントがノードの新しい位置に移動されるようにします。

于 2013-05-05T01:58:26.707 に答える