圖形視圖體系結構

 1. Graphics  View的特點

         Graphics View框架結構的主要特點如下

  1. Graphics View框架結構中,系統可以利用αt繪圖系統的反鋸齒、 OpenGL工具來改善繪圖性能。

  2. Graphics View支持事件傳播體系結構,可以使圖元在場景( scene)中的交互能力提高一倍,圖元能夠處理鍵盤事件和鼠標事件。其中,鼠標事件包括鼠標按下、移動、釋放和雙擊,還可以跟蹤鼠標的移動。

  3. 在 Graphics View框架中,通過二元空間劃分樹( Binary SpacePartitioning,BSP)提供快速的圖元査找,這樣就能夠實時地顯示包含上百萬個圖元的大場景。

 2. Graphics  View的三元素

Graphics View框架結構主要包含三個類,場景類(QGraphicsScene)、視圖類( GRaphics View)和圖元類( QGraphicsltem),統稱爲“三元素”。其中,場景類提供了一個用於管理位於其中的衆多圖元容器,視圖類用於顯示場景中的圖元,一個場景可以通過多個視圖表現,一個場景包括多個幾何圖形。它們三者之間的關係如圖所示。

(1)場景類: QGraphicsScene類

它是一個用於放置圖元的容器,本身是不可見的,必須通過與之相連的視圖類來顯示及與外界進行互操作。通過 QGraphicsScene: addItemO可以添加一個圖元到場景中。圖元可以通過多個函數進行檢索。 QGraphicsScene: items和一些重載函數可以返回和點、矩形、多邊形或向量路徑相交的所有圖元。 QGraphics Scene: sitemap()返回指定點的最頂層圖元。

場景類主要完成的工作包括,提供對它包含的圖元的操作接口和傳遞事件,管理各個圖元的狀態(如選擇和焦點處理),提供無變換的繪製功能(如打印)等。

事件傳播體系結構將場景事件發送給圖元,同時也管理圖元之間的事件傳播。如果場景接收到了在某一點的鼠標單擊事件,場景會將事件傳給在這一點的圖元。

管理各個圖元的狀態(如選擇和焦點處理)。可以通過QGraphicsScene: setSelection Areao函數選擇圖元,選擇區域可以是任意的形狀,使用 QPainterPath表示。若要得到當前選擇的圖元列表,則可以使用函數QGraphics Scene: Selectedltemso。可以通過 QGraphicsScene: setFocusltemo函數或GRaphics Scene: setFocuso函數來設置圖元的焦點,獲得當前具有焦點的圖元使用函數 QGraphicsScene: focusltem()。

如果需要將場景內容繪製到特定的繪圖設備,則可以使用QGraphicsScene: render函數在繪圖設備上繪製場景。

(2)視圖類: QGraphics View類

它提供一個可視的窗口,用於顯示場景中的圖元。在同一個場景中可以有多個視圖,也可以爲相同的數據集提供幾種不同的視圖。

QGraphics View是可滾動的窗口部件,可以提供滾動條來瀏覽大的場景。如果需要使用 OpengL,則可以使用 QGraphics view: set viewport將視圖設置爲QGLWidget

視圖接收鍵盤和鼠標的輸入事件,並將它們翻譯爲場景事件(將座標轉換爲場景的座標)。使用變換矩陣函數 QGraphics View: matrix可以變換場景的座標,實現場景縮放和旋轉。 GRaphics View提供 QGraphics View: map ToSceneo和GRaphics View: map FromSceneo用於與場景的座標進行轉換。

(3)圖元類: QGraphicsItem類

它是場景中各個圖元的基類,在它的基礎上可以繼承出各種圖元類,Qt已經預置的包括直線( QGraphicsLineltem)、橢圓( QGraphicsEllipseltem)、文本圖元( QGraphics Textitem)、矩形( QGraphicsRectitem)等。當然,也可以在 QGraphicsltem類的基礎上實現自定義的圖元類,即用戶可以繼承QGraphicsItem實現符合自己需要的圖元。

  QgraphicsItem主要有以下幾點功能:

●處理鼠標按下、移動、釋放、雙擊、懸停、滾輪和右鍵菜單事件。

●處理鍵盤輸入事件。

●處理拖曳事件

●分組。

●碰撞檢測

此外,圖元有自己的座標系統,也提供場景和圖元。圖元還可以通過QGraphicsltem: matrix來進行自身的交換,可以包含子圖元。

 3. Graphics  View的座標系統

Graphics View左邊基於笛卡爾座標系,一個圖元的場景具有X座標和Y座標。當使用沒有變換的視圖觀察場景時,場景中的一個單元對應屏幕上的一個像素。

三個 Graphics View基本類有各自不同的座標系,場景座標、視圖座標和圖元座標。 Graphics View提供了三個座標系統之間的轉換函數。在繪製圖形時,Graphics View的場景座標對應 QPainter的邏輯座標、視圖座標和設備座標。

1.場景座標

場景座標是所有圖元的基礎座標系統。場景座標系統描述了頂層的圖元,每個圖元都有場景座標和相應的包容框。場景座標的原點在場景中心,座標原點是X軸正方向向右,Y軸正方向向下。

       QGraphicsScene類的座標系以中心爲原點(0,0),如圖所示。

 

       2.  視圖座標

視圖座標是窗口部件的座標。視圖座標的單位是像素。 GRaphics View視圖的左上角是(0,0),X軸正方向向右,Y軸正方向向下。所有的鼠標事件最開始都是使用視圖座標。

 

QGraphics View類繼承自 Q Widget類,因此它與其他的 QWidget類一樣,以窗口的左上角作爲自己座標系的原點,如圖73所示。

 

       3.圖元座標

圖元使用自己的本地座標,這個座標系統通常以圖元中心爲原點,這也是所有變換的原點。圖元座標方向是X軸正方向向右,Y軸正方向向下。創建圖元后,只需要注意圖元座標就可以了,QGraphicsScene 和QgraphicsView會完成所有的變換。

QGraphicsItem類的座標系,若再調用QGraphicsItem類的paint()函數重繪圖元時,則以此座標系未基準。如圖所示。

 

根據需要,Qt提供了這三個座標系之間的互相轉換函數,以及圖元與圖元之間的轉換函數,若需從 QGraphicslten座標系中的某一點座標轉換到場景中的座標,則可調用 QGraphicsltem的 map ToSceneo函數進行映射。而 QGraphicsltem的mapToParentO函數則可將 QGraphicsltem座標系中的某點座標映射至它的上一級座標系中,有可能是場景座標,也有可能是另一個 QGraphicsItem座標。

Graphics View框架提供了多種座標變換函數,見表。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章