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