我有以下代码:
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();
没什么特别的,只有带QGraphicsScene的QGraphicsView和一些QGraphicsRectItem。 问题:为什么执行后所有点(pf1,pf2,pf3,pf4甚至spf1,spf2)都等于QPointF(0.0,0.0)?
我使用的是Qt 5.4.1。
根据我的理解,spf1必须是QPointF(40.0,40.0),spf2必须是QPointF(20.0,20.0)。
答案 0 :(得分:1)
如果你查看文档,那么你会发现:
QGraphicsRectItem * QGraphicsScene :: addRect(const QRectF& rect,const QPen& pen = QPen(),const QBrush& brush = QBrush())
创建矩形项并将其添加到场景中,并返回该项 指针。矩形的几何形状由rect及其笔定义 和画笔初始化为笔和画笔。 请注意该项目 几何在项坐标中提供,其位置为 初始化为(0,0)。例如,如果QRect(50,50,100,100)是 另外,它的左上角相对于原点位于(50,50) 在项目坐标系中
。结果,Item的坐标为(0,0),但您可以使用:
进行设置pRect1->setPos(QPoint(30,30));
看看会发生什么。希望它能帮助您理解QGraphicsScene坐标系!
P.S:
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));