2012-01-01 27 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)场景被硬编码),并从减去它对象在场景中的位置。这意味着这两个函数返回相对于父对象的x和y位置。

+0

谢谢 - 这实际上是我打算做的。 – giraffee 2012-01-02 17:35:30

1

我想到的唯一情况是在设置子图绘制坐标之前在父项上使用QGraphicsItem::mapToScene

1

您是否在尝试使用QGraphicsItem::setParentItem并在设置QGraphicsLineItem的位置时参考QGraphicsItem::parentItem

相关问题