1. QGraphicsView架構學習總結(1) - 知乎 (zhihu.com)
2. 如何認識Qt GraphicsView的坐標體系-百度經驗 (baidu.com)
3. Qt中QGraphics類坐標映射關系詳解 - cthu - 博客園 (cnblogs.com)
【筆記】:
1. 視圖(view)、場景(scene)、圖元(item)三者的坐標系:
1)視圖坐標系與主窗體的邏輯坐標相同,以窗體左上角為原點(0,0),x 向右為正,y 向下為正。
2)場景坐標系以場景中心為原點。
setSceneRect 函數設置了視圖中的場景坐標系某點到視圖原點的映射,及場景尺寸。
3)圖元坐標系以圖元中心為原點。
3.1)QGraphicsItem::boundingRect 函數確定以圖元原點為中心,圖元的繪制范圍:
QRectF(-radius - penWidth / 2, -radius - penWidth / 2, diameter + penWidth, diameter + penWidth);
3.2)setPos 函數設置圖元在場景中的位置(基於場景坐標系),pos 和 scenePos 函數返回圖元位置(基於場景坐標系)。
4)默認情況:
4.1)默認圖元原點與場景原點重合。
4.2)當場景(圖元)尺寸小於視圖尺寸時,默認場景原點(即中心)位於視圖中心。
//4.3)當場景(圖元)尺寸大於視圖尺寸時,默認場景原點(即中心)位於視圖中心。
2.1 用法示例1:
假設有一個200*200的圖元,
設置視圖尺寸:
view->resize(400, 400);
設置場景坐標系某點(0, 0)到視圖原點(0, 0)的映射,及場景尺寸:
scene->setSceneRect(0, 0, 400, 400);
設置圖元原點位置:
item->setPos(0, 0);
2.2 用法示例2:
假設有一個200*200的圖元,
設置視圖尺寸:
view->resize(400, 400);
設置場景坐標系某點(-200, -200)到視圖原點(0, 0)的映射,及場景尺寸:
scene->setSceneRect(-200, -200, 400, 400);
設置圖元原點位置:
item->setPos(0, 0);