Qt 圖形視圖框架(QGraphicsView, QGraphicsScene, 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 函數設置圖元在場景中的位置(基於場景坐標系),posscenePos 函數返回圖元位置(基於場景坐標系)。

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM