C++ 理解QT';s图形视图坐标系

C++ 理解QT';s图形视图坐标系,c++,qt,C++,Qt,我有以下代码: QGraphicsScene* pScene = new QGraphicsScene(this); ui->graphicsView->setScene(pScene); pScene->addRect(0, 0, 200, 200); QGraphicsRectItem* pRect1 = pScene->addRect(40, 40, 100, 100); QGraphicsRectItem* pRect2 = new QGraphicsRectIt

我有以下代码:

QGraphicsScene* pScene = new QGraphicsScene(this);
ui->graphicsView->setScene(pScene);
pScene->addRect(0, 0, 200, 200);
QGraphicsRectItem* pRect1 = pScene->addRect(40, 40, 100, 100);
QGraphicsRectItem* pRect2 = new QGraphicsRectItem(20, 20, 19, 19, pRect1);
QPointF pf1 = pRect1->pos();
QPointF pf2 = pRect2->pos();
QPointF pf3 = pRect2->mapFromParent(pRect1->pos());
QPointF pf4 = pRect2->mapToParent(pRect2->pos());
QPointF spf1 = pRect1->scenePos();
QPointF spf2 = pRect2->scenePos();
没什么特别的,只有一个QGraphicsView和几个QGraphicsRecitem。 问题:为什么执行后所有点(pf1、pf2、pf3、pf4甚至spf1、spf2)都等于QPointF(0.0、0.0)

我正在使用Qt5.4.1


据我所知,spf1必须是QPointF(40.0,40.0),spf2必须是QPointF(20.0,20.0)。

如果您查看文档,您会发现:

qgraphicsrecitem*qgraphicscene::addRect(常量QRectF&rect,常量 QPen&pen=QPen(),常量QBrush&brush=QBrush())

创建矩形项并将其添加到场景中,然后返回该项 指针。矩形的几何图形由rect及其画笔定义 和画笔被初始化为画笔和画笔请注意,项目的 几何图形在项目坐标中提供,其位置为 初始化为(0,0)。例如,如果一个QRect(50,50,100,100)是 添加后,其左上角将位于相对于原点的(50,50)处 在项目坐标系中

。因此,项目的坐标为(0,0),但您可以使用以下设置:

pRect1->setPos(QPoint(30,30));
看看会发生什么。希望它能帮助你理解Qgraphicscene坐标系

附言:

QGraphicsRectItem* pRect1 = pScene->addRect(0, 0, 100, 100);
QGraphicsRectItem* pRect2 = pScene->addRect(0, 0, 20, 20);
pRect1->setPos(QPoint(40,40));
pRect2->setPos(QPoint(20,20));