Graphics View繪圖架構(一)


Qt會繪制復雜的可交互圖形提供了Graphics View繪圖架構,是一種基於圖形項(Graphics Item)模型/視圖模式

使用Graphics View架構可以繪制復雜的幾萬個基本圖形元件的圖形,並且每個圖形元件是可選擇,可拖放和修改的

Graphics View架構由以下3個部分組成:場景、視圖、圖形項

1. 場景(Scene)

QGraphicsScene類提供繪圖場景(Scene)。場景不可見,是一個抽象的管理圖形項的容器,可以向場景添加圖形項,獲取場景中的某個圖形項

1)   提供管理大量圖形項的快速接口

2)將事件傳播給每個圖形項

3)管理每個圖形項的狀態,:選擇狀態 焦點

4)管理未經變換的渲染功能

場景還有背景層前景層,通常由QBrush指定

2. 視圖

QGraphicsView提供繪圖的視圖(View)組件,用於顯示場景中的內容。可以為一個場景設置幾個視圖,用於對同一個數據集提供不同的視口

視圖接收鍵盤和鼠標輸入並轉換為場景事件,並進行坐標轉換后傳送給可視場景

3. 圖形項

  Graphics Item : 基本圖形元件, 基類:QGraphicsItem

  如繪制橢圓的QGraphicsEclipseItem、繪制矩形的QGraphicsRectItem、繪制文字的QGraphicsTextItem等

  支持鼠標事件響應    支持鍵盤輸入、按鍵事件

  支持拖放    支持組合,可以是父子項關系組合,通過QGraphicsItemGroup類進行組合

 

總結:場景是圖形項的容器,可以在場景上繪制很多圖形項,每個圖形項就是一個對象,這些圖形項可以被選擇、拖動等。

    視圖是顯示場景的一部分區域的視口,一個場景可以有多種視圖

    一個視圖顯示場景的部分區域或者全部區域,或從不同角度觀察場景

 

4. Graphics View有3個有效的坐標系:圖形項坐標、場景坐標、視圖坐標

  • 場景的坐標等價於 QPainter的邏輯坐標,一般以場景的中心為原點
  • 視圖坐標與設備坐標相同,是物理坐標,缺省以左上角為原點
  • 圖形項坐標是局部邏輯坐標,一般以圖件的中心為原點

  1)圖形項坐標

    使用自己的局部坐標(Item Coordinates),通常其中心為(0,0),各種坐標變換的中心

    圖形項的鼠標事件坐標是局部坐標表示,創建自定義圖形項,繪制圖形項時,只需要考慮其局部坐標

    QGraphicsScene 和 QGraphicsView 會自動進行坐標轉換

    一個圖形項的位置是其中心點在父坐標系統中的坐標,對於沒有父圖形項的圖形項,其父對象就是場景,圖形項的位置就是在場景中的坐標。

    如果一個圖形項還是其他圖形項的父項,父項進行坐標變換時,子項也做同樣的坐標變換。

    QGraphicsItem 的大多數函數都是在其局部坐標系上操作。

  2)視圖坐標

    View Coordinates 就是窗口界面(widget)的物理坐標,單位是像素。

    視圖坐標只與widget或視圖有關,與觀察的場景無關。QGraphicsVIew視口的左上角坐標總是(0,0)

  3) 場景坐標

    (Screen Coordinates)場景是所有圖形項的基礎坐標,場景坐標描述了每個頂層圖形項的位置,創建場景是可以定義場景矩形區的坐標范圍

      scene = new QGraphicsScene(-400,-300,800,600) 

    每個圖形項在場景中都有一個位置坐標,由函數QGraphicsItem::scenePos()給出,還有一個圖形項邊界矩形,QGraphicsItem::sceneBoundingRect()

    邊界矩形可以使得QGraphicsScene直到場景中那個區域發生變化。

    場景變化會發生 QGraphicsScene::changed()信號,參數是給場景的矩形列表

  4)  坐標映射(Coordinate Mapping)

    場景中操作圖形項,進行場景到圖形項、圖形項到圖形項,還有視圖到場景之間的坐標變化

    在QGraphicsView的視圖上單擊鼠標,通過QGraphicsView::mapToScene()視圖坐標映射到場景坐標,用QGraphicsScene::itemAt()函數可以獲取場景中鼠標光標出的圖形項

 


免責聲明!

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



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