天天看點

Qt圖形視圖架構一--概述

一、Graphics View 的特點

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

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

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

二、Graphics View的三元素

1.場景類(QGraphicsScene)

  場景類提供了一個用于管理位于其中的衆多圖元的容器。場景類本身是不可見的,必須通過與之相連的視圖類來顯示及與外界進行互動操作。

  場景類的常用操作如下:

  QGraphicsScene::addItem():添加一個圖元到場景中,注意不能線上程中添加Item,如需要線上程中添加則可以通過信号和槽來添加;

  QGraphicsScene::items():傳回場景中是以圖元;

  QGraphicsScene::itemAt():傳回指定點的頂層圖元;

  

2.視圖類(QGraphicsView)

  視圖類用于顯示場景中的圖元,一個場景可以通過多個視圖表現,也可以為相同的資料集提供幾種不同的視圖。

  

3.圖元類(QGraphicsItem)

  圖元類是場景中各個圖元的基類,在它的基礎上可以繼承出各種圖元類。Qt中已經預置了如下圖元:直線圖元(QGraphicsLineItem)、橢圓圖元(QGraphicsEllipseItem)、文本圖元(QGraphicsTextItem)、矩形圖元(QGraphicsRectItem)等。當然使用者可以繼承QGraphicsItem實作符合自己需要的圖元。

  QGraphicsItem主要有以下幾點功能:

  1.處理滑鼠按下、移動、釋放、輕按兩下、懸停、滾輪、和右鍵菜單事件;

  2.處理鍵盤輸入事件;

  3.處理拖拽事件;

  4.分組;

  5.碰撞檢測。

三、Graphics View的坐标系統

  Graphics View坐标是基于笛卡爾坐标系,三個Graphics View基本類有各自不同的坐标系。當然Graphics View提供了三個坐标系統之間的轉換函數。在繪制圖形時,Graphics View的場景坐标對應QPainter的邏輯坐标、視圖坐标和裝置坐标。

  

1.場景坐标

  場景坐标是所有圖元的基礎坐标系統。QGraphicsScene類的坐标系以中心原點(0, 0),X軸正方向向右,Y軸正方向向下,如下圖所示:

  

Qt圖形視圖架構一--概述

2.視圖坐标

  視圖坐标是視窗部件的坐标。視圖坐标的機關是像素。QGraphicsView類的左上角是(0,0),X軸正方向向右,Y軸正方向向下。如下圖所示:

  

Qt圖形視圖架構一--概述

  

3.圖元坐标

  圖元使用自己的本地坐标,這個坐标系統通常以圖元中心為原點,這也是所有變換的原點。圖元坐标方向是X軸正方向向右,Y軸正方向向下。圖元建立後,隻需注意圖元坐标就可以了,QGraphicsScene和QGraphicsView會完成所有的變換。圖元坐标如下圖所示:

  

Qt圖形視圖架構一--概述

  Fraphics View架構提供了多種坐标變換函數,如下标所示: 

Qt圖形視圖架構一--概述