了解QT的图形视图坐标系

时间:2015-12-21 20:22:50

标签: 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 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)。

1 个答案:

答案 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));