1

我有我自己的对象实现QGraphicsItem- 它本质上只是一个带边框的正方形。我正在尝试在该项目中绘制形状,将其用作父项。问题是我用于父级中的形状的坐标不是相对于父级的坐标,而是相对于场景。

示例:我想QGraphicsLineItem在我QGraphicsItem的(父母)内画一个。父级为 50,50,尺寸为 20x20。如果我使用指定的父级绘制一条线,使用坐标 0,0,20,20,它会在相对于场景而不是父级的 0,0,20,20 处绘制。

有没有办法让线条(或任何其他形状)使用相对于父级而不是场景的位置?或者我是否需要通过检查父母的 X 和 Y 来手动确定坐标?

4

3 回答 3

2

您如何让您的每个QGraphicsItems 也继承自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()ypos()递归调用父级的xpos()and ypos()(场景硬编码在(0, 0)),并从场景中对象的位置中减去它。这意味着这两个函数返回对象相对于父对象的 x 和 y 位置。

于 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 回答