2012-01-01 11 views
1

私は自分のオブジェクトにQGraphicsItemを実装しています。私はそのアイテムを親として使用してそのアイテム内に図形を描こうとしています。問題は、親内のシェイプに使用している座標が、親の座標に相対的ではなく、シーンであることです。QGraphicsItem(親)内にシェイプを描画し、親に対する相対位置を持つ

例:QGraphicsItem(親)内にQGraphicsLineItemを描画します。親は50,50で、寸法は20x20です。私が0,0,20,20の座標を使って親を指定して線を描くと、親ではなくシーンに関連して0,0,20,20が描画されます。

ライン(または他のシェイプ)がシーンではなく親に相対的な位置を使用する方法はありますか?または、親のXとYをチェックして座標を手動で決定する必要がありますか?

答えて

2

QGraphicsItemもそれぞれQObjectから継承し、それぞれを?に渡しますか。
そして、親COORDSに基づいて、シーン内の位置(再帰的に)決定:

class Scene(QGraphicsScene): 

    def __init__(self): 
     QGraphicsScene.__init__(self) 

    def xpos(self): 
     return 0 

    def ypos(self): 
     return 0 


class RelativeItem(QGraphicsRectItem, QObject): 

    def __init__(self, parent): 
     QGraphicsRectItem.__init__(self) 
     QObject.__init__(self, parent) 

    def xpos(self): 
     return self.scenePos().x() - self.parent().xpos() 

    def ypos(self): 
     return self.scenePos().y() - self.parent().ypos() 

scene = QGraphicsScene() 
obj1 = RelativeItem(scene) # Relative to scene 
obj2 = RelativeItem(obj1) # Relative to obj1 

xpos()ypos()再帰呼び出しを親のxpos()ypos()(シーン(0, 0)にハードコーディングされている)、からそれを減算シーン内のオブジェクトの位置これは、2つの関数が親の相対位置でオブジェクトのxとyの位置を返すことを意味します。

+0

ありがとうございます - これは基本的に私がやろうとしていることです。 – giraffee

1

子供の描画座標を設定する前に親アイテムにQGraphicsItem::mapToSceneを使用することが私にとって唯一のことです。

1

QGraphicsLineItemの位置を設定するときにQGraphicsItem::setParentItemを使用し、QGraphicsItem::parentItemを参照しましたか?

関連する問題