日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

QT学习:图形视图Graphics View

發(fā)布時間:2024/9/30 c/c++ 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 QT学习:图形视图Graphics View 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、Graphics View框架結(jié)構(gòu)的主要特點

(1)在Graphics View框架結(jié)構(gòu)中,系統(tǒng)可以利用Qt繪圖系統(tǒng)的反鋸齒、OpenGL工具來改善繪圖性能。
(2) Graphics View支持事件傳播體系結(jié)構(gòu),可以使圖元在場景(scene) 中的交互能力提高1倍,圖元能夠處理鍵盤事件和鼠標事件。其中,鼠標事件包括鼠標被按下、移動、釋放和雙擊,還可以跟蹤鼠標的移動。
(3)在Graphics View框架中,通過二元空間劃分樹(Binary Space Pritining, BSP) 提供快速的圖元查找,這樣就能夠?qū)崟r地顯示包含上百萬個圖元的大場景。

二、Graphics View框架結(jié)構(gòu)的三元素

Graphics View 框架結(jié)構(gòu)主要包含三個類,即場景類(QGrphicsSene)、視圖類(QGraphicsView)和圖元類(QGraphicstem),統(tǒng)稱為“三元素”。其中,場景類提供了一個用于管理位于其中的眾多圖元容器,視圖類用于顯示場景中的圖元,一個場景可以通過多個視圖表現(xiàn),一個場景包括多個幾何
圖形。三元素的關(guān)系如圖所示:

1、場景類: QGraphicsScene類

它是一個用于放置圖元的容器,本身是不可見的,必須通過與之相連的視圖類來顯示及與外界進行互操作。通過QGraphicsScene:addItem()可以添加一個圖元到場景中。圖元可以通過多個函數(shù)進行檢索。QGraphicsScene:items()和一 些 重載函數(shù)可以返回與點、矩形、多邊形或向量路徑相交的所有圖元。QGraphicsScene:itemAt()返回指定點的頂層圖元。
場景類主要完成的工作包括提供對它包含的圖元的操作接口和傳遞事件、管理各個圖元的狀態(tài)(如選擇和焦點處理)、提供無變換的繪制功能(如打印)等。
事件傳播體系結(jié)構(gòu)將場景事件發(fā)送給圖元,同時也管理圖元之間的事件傳播。如果場景接收了在某一點的鼠標單擊事件,場景會將事件傳給這一點的圖元。
(1) 管理各個圖元的狀態(tài)(如選擇和焦點處理)。可以通過QGraphicsScene:setSelectionArea()函數(shù)選擇圖元,選擇區(qū)域可以是任意的形狀,使用QPainterPath 表示。
(2) 若要得到當前選擇的圖元列表,則可以使用QGraphicsScene:selectedItems()函數(shù)。
(3) 可以通過QGraphicsScene::setFocusItem()函數(shù)或QGraphicsScene::setFocus()函數(shù)來設(shè)置圖元的焦點
(4) 獲得當前具有焦點的圖元使用QGraphicsScene::focusItem()函數(shù)。
(5) 如果需要將場景內(nèi)容繪制到特定的繪圖設(shè)備,則可以使用QGraphicsCcene:render()函數(shù)在繪圖設(shè)備上繪制場景。

2、 視圖類: QGraphicsView 類

它提供一個可視的窗口,用于顯示場景中的圖元。在同一個場景中可以有多個視圖,也可以為相同的數(shù)據(jù)集提供幾種不同的視圖。
QGraphicsView是可滾動的窗口部件,可以提供滾動條來瀏覽大的場景。如果需要使用OpenGL,則可以使用QGraphics View:setViewport()函數(shù)將視圖設(shè)置為QGLWidget。
視圖接收鍵盤和鼠標的輸入事件,并將它們翻譯為場景事件(將坐標轉(zhuǎn)換為場景的坐標)。使用變換矩陣函數(shù)QGraphicsView::matrix()可以變換場景的坐標,實現(xiàn)場景縮放和旋轉(zhuǎn)。QGraphicsView提供QGraphics View:mapToScene()和QGraphicsView:mapFromScene()函數(shù)用于與場景的坐標進行轉(zhuǎn)換。

3、圖元類: QGraphicsltem類

它是場景中各個圖元的基類,在它的基礎(chǔ)上可以繼承出各種圖元類,Qt已經(jīng)預(yù)置的包括直線(QGraphicsLineItem)、 橢圓(QGraphicsEllipseItem)、 文本圖元(QGraphicsTextItem)、 矩形(QGraphicsRectItem)等。當然,也可以在QGraphicsItem類的基礎(chǔ)上實現(xiàn)自定義的圖元類,即用戶可以繼承QGraphicsItem實現(xiàn)符合自己需要的圖元。
QGraphicsItem主要有以下功能。
(1)處理鼠標按下、移動、釋放、雙擊、懸停、滾輪和右鍵菜單事件。
(2)處理鍵盤輸入事件。
(3)處理拖曳事件。
(4)分組。
(5)碰撞檢測。

三、GraphicsView框架結(jié)構(gòu)的坐標系統(tǒng)

Graphics View坐標基于笛卡兒坐標系,一個圖元的場景具有x坐標和y坐標。當使用沒有變換的視圖觀察場景時,場集中的一個單元對應(yīng)屏幕上的一個像素。
三個Graphics View 基本類有各自不同的空標系,場景坐標、視圖坐標和圖元坐標。Graphics View提供了三個坐標系統(tǒng)之間的轉(zhuǎn)換函數(shù),在繪制圖形時,Graphics View的場景坐標對應(yīng)QPainter 的邏輯坐標、視圖坐標和設(shè)備坐標。

1、場景坐標

場景坐標是所有圖元的基礎(chǔ)坐標系統(tǒng)。場景坐標系統(tǒng)描述了頂層的圖元,每個圖元都有場景坐標和相應(yīng)的包容框。場景坐標的原點在場景中心,坐標原點是x軸正方向向右,y軸正方向向下。QGraphicsScene類的坐標系以中心為原點(0,0)。
如圖所示:

2、視圖坐標

視圖坐標是窗口部件的坐標。視圖坐標的單位是像素。QGraphicsView視圖的左上角是(0,0),x軸正方向向右,y軸正方向向下。所有的鼠標事件最開始都是使用視圖坐標。
QGraphicsView類繼承自QWidget 類,因此它與其他的QWidget類一樣,以窗口的左上角作為自己坐標系的原點。
如圖所示:

3、圖元坐標

圖元使用自己的本地坐標,這個坐標系統(tǒng)通常以圖元中心為原點,這也是所有變換的原點。圖元坐標方向是x軸正方向向右,y軸正方向向下。創(chuàng)建圖元后,只需注意圖元坐標就可以了,QGraphicsScene和QGraphicsView會完成所有的變換。
QGraphicsItem類的坐標系,在調(diào)用QGraphicsItem類的paint0函數(shù)重繪圖元時,則以此坐標系為基準。
如圖所示:

下表為Graphics View框架提供的多種坐標變換函數(shù)

總結(jié)

以上是生活随笔為你收集整理的QT学习:图形视图Graphics View的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。