2015-12-21 63 views
1

我有以下代碼:瞭解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(S)。 問題:爲什麼執行後所有的點(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

如果你會看的文件,然後你會發現:

QGraphicsRectItem * QGraphicsScene :: addRect(常量QRectF &矩形,常量 QPEN &筆= QPEN()const的QBrush &刷= QBrush ())

創建矩形項目並將其添加到場景中,並返回項目 指針。矩形的幾何形狀由rect定義,其筆 和畫筆被初始化爲筆和畫筆。 請注意,項目的 幾何圖形以項目座標提供,其位置爲 ,初始化爲(0,0)。例如,如果一個查閱QRect(50,50,100,100)是 加入,其左上角將在(50,50)相對於原點 中的項目座標系

。作爲結果,該項目的座標爲(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));