Qt 在QGraphicsItem(父级)中绘制形状,其位置相对于父级
我有自己的对象实现了一个Qt 在QGraphicsItem(父级)中绘制形状,其位置相对于父级,qt,paint,qgraphicsitem,qgraphicsscene,Qt,Paint,Qgraphicsitem,Qgraphicsscene,我有自己的对象实现了一个QGraphicsItem——它本质上只是一个带边框的正方形。我正在尝试在该项目中绘制形状,并将其用作父项。问题是,我在父对象中用于形状的坐标不是相对于父对象的坐标,而是相对于场景的坐标 示例:我想在我的QGraphicsItem(父项)中绘制一个QGraphicsLineItem。父对象为50,50,尺寸为20x20。如果我使用坐标0,0,20,20与指定的父对象绘制一条线,它将相对于场景而不是父对象在0,0,20,20处绘制 有没有办法使线条(或任何其他形状)使用相对
QGraphicsItem
——它本质上只是一个带边框的正方形。我正在尝试在该项目中绘制形状,并将其用作父项。问题是,我在父对象中用于形状的坐标不是相对于父对象的坐标,而是相对于场景的坐标
示例:我想在我的QGraphicsItem
(父项)中绘制一个QGraphicsLineItem
。父对象为50,50,尺寸为20x20。如果我使用坐标0,0,20,20与指定的父对象绘制一条线,它将相对于场景而不是父对象在0,0,20,20处绘制
有没有办法使线条(或任何其他形状)使用相对于父对象而不是场景的位置?或者我需要通过检查父对象的X和Y来手动确定坐标吗 我唯一想到的是在设置孩子的绘图坐标之前在父项上使用
QGraphicsItem::maptosene
。我唯一想到的是在设置孩子的绘图坐标之前在父项上使用QGraphicsItem::maptosene
。你如何让每一个QGraphicsItem
s还继承自QObject
,并将父对象传递给每个对象?然后,根据父坐标确定场景中的位置(递归):
xpos()
和ypos()
递归调用父对象的xpos()
和ypos()
(场景在(0,0)
处硬编码),并从对象在场景中的位置减去它。这意味着这两个函数返回对象相对于父对象的x和y位置。如何使每个QGraphicsItem
也继承自QObject
,并向每个对象传递父对象?然后,根据父坐标确定场景中的位置(递归):
xpos()
和ypos()
递归调用父对象的xpos()
和ypos()
(场景在(0,0)
处硬编码),并从对象在场景中的位置减去它。这意味着这两个函数返回对象相对于父对象的x和y位置。您是否尝试过使用QGraphicsItem::setParentItem
并在设置QGraphicsItem
的位置时引用QGraphicsLineItem::parentItem
QGraphicsItem::setParentItem
并在设置QGraphicsLineItem
的位置时参考QGraphicsItem::parentItem
?谢谢-这基本上是我计划做的。谢谢-这基本上是我计划做的。
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