1

私は自分のオブジェクトを実装していますQGraphicsItem-それは本質的には境界線のある正方形です。親として使用して、そのアイテム内に図形を描画しようとしています。問題は、親内のシェイプに使用している座標が、親の座標ではなく、シーンに関連していることです。

例:自分(親)QGraphicsLineItem内にを描画したい。QGraphicsItem親は50,50で、寸法は20x20です。座標0,0,20,20を使用して、親を指定して線を描画すると、親ではなく、シーンを基準にして0,0,20,20に描画されます。

線(または他の形状)がシーンではなく親を基準にした位置を使用するようにする方法はありますか?または、親のXとYをチェックして、手動で座標を決定する必要がありますか?

4

3 に答える 3

2

QGraphicsItemそれぞれのをから継承しQObject、それぞれに親を渡すのはどうですか。
次に、親座標(再帰的)に基づいてシーン内の位置を決定します。

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

于 2012-01-02T02:13:27.323 に答える
1

私の頭に浮かぶのは、QGraphicsItem::mapToScene子の描画座標を設定する前に、親アイテムで使用することだけです。

于 2012-01-01T22:44:09.910 に答える
1

の位置を設定するときに使用QGraphicsItem::setParentItemして参照してみましたか?QGraphicsItem::parentItemQGraphicsLineItem

于 2012-01-02T03:30:56.030 に答える