我有一个scene = QGraphicsScene(),我通过scene.addEllipse(100, 100, 10, 10, greenPen, greenBrush)添加了一个椭圆。笔刷和笔是在前面设置的。我直接将QGraphicsScene添加到带有MyGraphicsView.setScene(scene)的QGraphicsView中。所有这些工作,除了椭圆的位置始终是中心。addEllipse()函数中的前2个参数应该是坐标(在本例中是100,100),但是不管我在那里放置了什么,椭圆总是在中心。有什么想法吗?
编辑:现在我添加了3个这样的省略号(描述中删除的那个):
scene.addEllipse(10, 10, 10, 10, greenPen, greenBrush)
scene.addEllipse(-100, -10, 30, 30, bluePen, blueBrush)
scene.addEllipse(-100, -100, 60, 60, bluePen, blueBrush)我的结果是:

所以很明显,坐标在某种程度上起作用,但我仍然不知道具体是怎么回事。我必须要为现场设定一个起源吗?
如果我这么做
particleList = scene.items()
print(particleList[0].x())
print(particleList[1].x())
print(particleList[2].x())我得到:
0.0
0.0
0.0在这一点上,我完全糊涂了,我真的很想得到一些帮助。
发布于 2020-12-11 14:13:06
必须始终记住的一件重要事情是,QGraphicsItem的位置而不是反映了它的“左上角”坐标。
实际上,您可以有一个QGraphicsRectItem,它的QRectF定位在(100,100),但是它的位置位于(50,50)。这意味着矩形将显示在(150,150)处。形状的位置相对于项目的位置。
所有add[Shape]()函数的QGraphicsScene在其文档中都有以下重要说明:
注意,项目的几何图形是在项目坐标中提供的,其位置被初始化为(0,0)。
即使您创建一个坐标为(-100,-100)的QGraphicsEllipseItem,它仍将定位于(0,0),这是因为addEllipse()中的值(与所有其他函数一样)只描述形状的坐标。
然后,当创建QGraphicsScene时,它的sceneRect()没有显式设置,默认情况下它对应于所有项的边框。当场景被添加到视图中时,视图将根据默认为alignment()的Qt.AlignCenter自动定位场景。
如果整个场景在视图中可见(即没有可见滚动条),则
视图的对齐将决定场景在视图中呈现的位置。例如,如果对齐是默认的Qt::准直中心,场景将在视图中居中,如果对齐是(Qt::AlignLeft可比Qt::AlignTop),则场景将在视图的左上角呈现。
这也意味着,如果项目在负坐标或其形状在负坐标,该视图仍将显示的场景,中心的边界,所有的项目。
因此,您可以根据需要设置场景sceneRect 或视图sceneRect。如果未设置视图的sceneRect,则默认为场景的sceneRect。
如果要根据项目的位置显示项目,同时也要确保负坐标在中心“外部”正确,则必须确定可见sceneRect的大小并相应地设置它:
boundingRect = scene.itemsBoundingRect()
scene.setSceneRect(0, 0, boundingRect.right(), boundingRect.bottom())https://stackoverflow.com/questions/65252538
复制相似问题