QGraphicsItem如何使用訊號 槽

2021-09-23 14:50:22 字數 1168 閱讀 3227

對於 qgraphicsitem 來說,訊號/槽和屬性機制不是它的一部分,因為它不繼承自 qobject。這是乙個出於效能考慮的設計決策,允許比較大的場景以及快速的互動。

特殊情況下,如果真的需要使用訊號/槽,可以使用 qobject 的訊號/槽和屬性機制來擴充套件 qgraphicsitem。

這種方式屬於多繼承,也是最容易想到的方式。

class customitem : public qobject, public qgraphicsitem

;

qgraphicsobject 類為需要訊號/槽和屬性的所有 items 提供乙個基類,將 qgraphicsitem 的許多基本 setters 和 getters 對映到屬性,並為其中的許多新增了通知訊號。

由於 qgraphicsobject 繼承自 qobject 和 qgraphicsitem,所以,上述的自定義 item 可以變成這樣:

class customitem : public qgraphicsobject

;

這時,很多人會陷入一種誤區,認為上述兩種方式一樣,而且「繼承自 qgraphicsobject」更簡單。真的是這樣嗎?不妨分析一下!

正如上面所說,由於 qgraphicsobject 繼承自 qobject 和 qgraphicsitem,所以其擁有 qobject 和 qgraphicsitem 的基本特性。除此之外,它還提供了額外的訊號,例如:enabledchanged()、opacitychanged()、xchanged()、ychanged() 等等。

也就是說,如果使用 qgraphicsobject,會有一些不感興趣的訊號自動發射。例如,呼叫 qgraphicsitem::setpos(),會執行以下**:

void qgraphicsitemprivate::setposhelper(const qpointf &pos)

}

這時,qgraphicsobject 會有額外的開銷(發射 xchanged()、ychanged() 訊號)。所以,效能如何?用事實說話!

雖然上述方式均繼承自 qobject,來自 qobject 的記憶體開銷不可避免,但 qgraphicsobject 效率明顯更低,因為其有額外的訊號,如果建立許多 qgraphicsobject,可能會顯著影響效能。

乙個QGraphicsItem 座標變換的問題

用qabstractgraphicsshapeitem 類做基類,派生出一些基本幾何圖形類,並給它們新增用於滑鼠操作的控制點,這些都沒有問題。但是加入旋轉變換後問題出現了。首先qgraphicsitem的本地座標系統,如果該座標的中心點不是該圖形的中心,那麼這個圖形在旋轉後,進行改變大小的操作,然後...

如何發展?如何賺錢?

打工者!無產者!打工的人們啊!你是否在嘆息 怎麼打工錢這麼少?怎麼打工工資總不漲?在這裡和大家 如何發展?如何賺錢?一 俗話說,女怕嫁錯郎,男怕入錯得 選對行業,賺錢就事半功倍。大家可以仔細看看,同樣的崗位,不同的行業收入的差別啊!可能是倍數。所以在找工作時,不妨先去買一付清晰的眼鏡,瞧瞧這個行業利...

如何計算 如何計算partial charge?

partial charge可以很方便地輸出每一條能帶上每乙個波矢所對應的電荷密度,有利於我們更深層次得理解體系的電子結構性質。下面將介紹如何利用第一性原理軟體vasp去計算體系的partial charge。計算partial charge要用到以下幾個開關 lpard,該開關有兩個取值,t和f。...