Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 在QGraphicsItem(父级)中绘制形状,其位置相对于父级_Qt_Paint_Qgraphicsitem_Qgraphicsscene - Fatal编程技术网

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