QGraphicsScene 的简单理解--关于手册的简要翻译
文章目錄
- QGraphicsScene 的簡單理解--關于手冊的簡要翻譯
- 簡介:
- 一般操作:
- 關于scene's bounding rect:
- the location of items.
- scene's selection
- 事件處理與事件轉播
QGraphicsScene 的簡單理解–關于手冊的簡要翻譯
簡介:
QGraphicsScene 類提供了一個管理2D 圖形一個操作平臺。打個比方,QGraphicsScene 類類似一個舞臺,各類的2D圖形就是舞臺中呈現的各個角色或者道具。
QGraphicsScene 類 常與QGraphicsView一起使用,因為QGraphicsView會提供視圖。打個比方,就是觀看舞臺的取景框。常見的圖形項,這里包括線條、矩形框、文本,甚至是自定義圖形項等等。QGraphicsScene 類是raphics View Framework的一部分。
QGraphicsScene 類提供了一些操作方法,如:決定圖形項是否可視,及坐標位置。
運用QGraphicsView 類,還可以縮放視圖的方法來觀看整個場景或者部分場景。
一個簡單的例子:
QGraphicsScene scene;scene.addText("Hello, world!");QGraphicsView view(&scene);view.show();QGraphicsScene是不能觀看自身的。必須創建QGraphicsView 對象才可以看到場景中的圖形項的。
一般操作:
一旦創建了場景,如果想添加圖像項,怎么辦?有兩個選擇:
1、通用方法:addItem()
2、其他便捷方法: addEllipse(), addLine(), addPath(), addPixmap(), addPolygon(), addRect(), or addText()等。 圖像項的大小,可由上述函數來設定,該值是相對于圖形項自身的坐標體系的。添加到場景的默認坐標是(0,0);
然后,就可以使用QGraphicsView來觀看場景中的內容了。當場景發生變化時,(如圖像項移動或者坐標發生改變時), QGraphicsScene會發送信號changed() 。刪除圖形項,可用removeItem().
QGraphicsScene 運用索引算法使得管理圖形項的坐標變得高效。默認的BSP樹是使用的,該算法是適合場景中多數圖像項是靜置的。
關于scene’s bounding rect:
1、通過setSceneRect() 設定
2、場景的大小默認是無限制的,圖形項可以放置在場景中的任意一個位置。The scene rect 僅僅是用來記錄、管理場景中的圖形項的索引號的。
3、如果場景的rect 沒有被設定,那么該rect的大小是包括所有圖像項的最小rect , 可以通過itemsBoundingRect()來查看。但是這是比較耗時的,所以當需要操作較大的場景的時候,往往會預先設定場景的Rect。
the location of items.
QGraphicsScene 的其中一項強有力的能力在于它可以非常有效的決定涂香香的位置信息。甚至在擁有上百萬個圖像項的場景中,函數items() 能夠決定圖形項的位置在短短幾個毫秒內。
items()函數的重載項由好多個:
1、查找圖像項的位置。
2、查找圖像項與多邊形的相交等等
items()返回的是列表,最上層的是位于列表的第一項。為了便捷,itemAt()函數返回指定點最上面的圖形項。
scene’s selection
QGraphicsScene 還支持圖形項的選擇功能。
1、設置選擇:setSelectionArea(),
2、清除當前選擇:clearSelection().
3、返回當前的選擇: selectedItems()
事件處理與事件轉播
QGraphicsScene 的另一個功能是轉播來自QGraphicsView的事件。圖形視圖框架中的事件都是首先由視圖進行接收,然后傳遞給場景,再由場景傳遞給相應的圖形項。
舉個例子:
QApplication::sendEvent(). event()負責分發事件給各個圖像項。對于一些常用的事件有一些便捷操作方法,如keyPressEvent()處理鍵盤事件。mousePressEvent().處理鼠標點擊事件。
而對于鍵盤事件,它會傳遞給獲得焦點的圖形項,如果場景沒有獲得焦點,那么所有的鍵盤事件都會被丟棄。如果場景的setFocus()函數或者場景中的一個圖形項獲得了焦點,那么場景也會自動獲得焦點。如果場景丟失了焦點(例如調用了clearFocus()函數),然而它的一個圖形項獲得有焦點,那么場景就會保存這個圖形項的焦點信息,當場景重新獲得焦點后,就會確保最后一個焦點項目重新獲得焦點。
對于鼠標懸停,QGraphicsScene 會調度懸停事件。如果一個圖形項可以接收懸停事件,那么當鼠標進入它的區域時,它會收到一個 GraphicsSceneHoverEnter事件。如果鼠標繼續在圖形項區域中進行移動,那么QGraphicsScene 會向該圖形發送一個GraphicsSceneHoverMove事件。當鼠標離開圖形項區域時,它將會收到GraphicsSceneHoverLeave 事件。
所有的鼠標事件都會傳遞到當前鼠標抓取的圖形項。
總結:
場景的作用無非就是幾下幾點:
1、提供了用于管理大量圖形項的接口。如添加圖形項,刪除圖形項,查找圖形項等。通俗點講場景可以看做是一個舞臺,或者容器。
2、傳播事件給每一個圖形項。
3、管理圖形項的狀態,例如選擇和焦點處理。
總結
以上是生活随笔為你收集整理的QGraphicsScene 的简单理解--关于手册的简要翻译的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 期待的程序员的生活并非你想象的那么简单!
- 下一篇: Qt 运用鼠标绘制多边形