簡介說明: 這個QGraphicsScene類用于在場景中操作大量的2D圖形元素,這個類是作為一個容器QGraphicsItems存在的,它是連同QGraphicsView用于可視化的二維表面的圖形項(xiàng)目,如直線,矩形,文本,甚至定制物品;還可以有效地確定元素在場景中的位置以及控制元素的時顯示區(qū)域及方式。配合QGraphicsView你可以可視化整個場景、或方大縮小或只顯示一部分等... 首先來把 QGraphicsView, QGraphicsScene 改個稱呼: 示例一:
示例二:
最后sys.exit(app.exec_())讓應(yīng)用程序的主事件循環(huán)。事件處理從這里開始。主事件循環(huán)從窗口系統(tǒng)接收事件并分發(fā)到應(yīng)用程序的窗口部件上。當(dāng)主事件循環(huán)結(jié)束,如果我們調(diào)用 exit() 方法或者主窗口部件被銷毀。 sys.exit() 方法確保干凈的退出。將通知環(huán)境應(yīng)用程序是如何結(jié)束的。 你是否想知道為什么 exec_() 方法會有下劃線,一切皆有含義,這顯然是因?yàn)閑xec是Python的關(guān)鍵字,因此,用 exec_() 來取代它。 要想將元素添加到場景中,首先你必須構(gòu)建一個 QGraphicsScene圖形場景,然后通過調(diào)用addItem()將元素添加到你構(gòu)建的QGraphicsScene圖形場景中。QGraphicsScene圖形場景還有很多相當(dāng)便利的方法,如:addEllipse(), addLine(), addPath(), addPixmap(), addPolygon(), addRect(),addText()等。所有添加的元素都具有他的尺寸和相對于場景的坐標(biāo)系,元素初始化位置為所在場景中的(0,0)。 然后,使用QGraphicsView圖形窗口來加載QGraphicsScene圖形場景,就可以看到你在場景中添加的元素啦。當(dāng)場景變化時,(例如,當(dāng)一個元素移動或變換)QGraphicsScene圖形場景發(fā)出的changed()信號。如果要刪除場景中的某個元素用removeItem()。 QGraphicsScene圖形場景使用一個索引算法來管理元素的位置。默認(rèn)情況下,一個BSP(二進(jìn)制空間劃分)樹被使用;應(yīng)用于場景中的靜態(tài)元素(即不走動)的算法。您可以通過調(diào)用setItemIndexMethod()來禁用該索引。有關(guān)可用的索引算法的詳細(xì)信息,請參閱itemIndexMethod屬性。 QGraphicsScene圖形場景的邊界矩形是通過調(diào)用setSceneRect()來進(jìn)行設(shè)置的,場景是可以被放在QGraphicsView圖形窗口中的任何位置的。并且場景的默認(rèn)大小是無限制的(即可超出QGraphicsView圖形窗口的大小的,這時窗口就會出現(xiàn)上下左右的滾動條)。這個QGraphicsScene圖形場景中的RECT僅針對場景內(nèi)部不包含外層的QGraphicsView圖形窗口(QGraphicsView圖形窗口有自己的RECT)。在QGraphicsScene圖形場景大小范圍內(nèi)的元素才會被看到即RECT上下左右范圍內(nèi)的。可以通過itemsBoundingRect()來得知現(xiàn)在場景的大小。 注意:itemsBoundingRect()是一個比較耗時的功能,它的運(yùn)作通過收集場景中所有元素的位置信息找出其中最遠(yuǎn)坐標(biāo)的位置。所以最好先設(shè)置好自己的場景大小不要使用默認(rèn)大小。 QGraphicsScene圖形場景最大的優(yōu)勢是它能夠有效的確定元素的位置。即便是在有著數(shù)以百萬計(jì)的元素時通過items()函數(shù)可以在幾毫秒內(nèi)確定元素的位置。 |
|