Qt 圖形檢視框架(QGraphicsView, QGraphicsView, QGraphicsItem)座標系
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);