由于 qgraphicsscene 和 qgraphicsitem 的大多數便利函數例如items()selecteditems()、collidingitems()、childitems()傳回一個 <code>qlist<qgraphicsitem *></code> 清單在周遊清單的時候通常需要對其中的 qgraphicsitem 進行類型檢測與轉換以确定實際的 item。
<a href="#%e7%ae%80%e8%bf%b0">簡述</a>
<a href="#%e7%b1%bb%e5%9e%8b%e6%a3%80%e6%b5%8b">類型檢測</a>
<a href="#qgraphicsitemtype">qgraphicsitemtype</a>
<a href="#qgraphicsitemusertype">qgraphicsitemusertype</a>
<a href="#%e7%b1%bb%e5%9e%8b%e8%bd%ac%e6%8d%a2">類型轉換</a>
<a href="#%e5%ae%9e%e9%99%85%e5%ba%94%e7%94%a8">實際應用</a>
qgraphicsitem 中包含兩個與類型相關的枚舉值
qgraphicsitem::type 是标準 item 類中 virtual type() 函數傳回的類型值。所有标準 item 與唯一的 type 值相關聯。例如qgraphicspathitem::type() 傳回的值為 2。
其他标準 item 類似type 分别為 3、4、5……
qgraphicsitem::usertype 是自定義 itemqgraphicsitem 或任何标準 item 的子類的最小允許類型值。該值與 qgraphicsitem::type() 的重新實作結合使用并聲明一個 type 枚舉值。例如
注意要使 qgraphicsitem_cast 與自定義 item 一起正常工作需要為其重新實作 type() 函數。
t qgraphicsitem_cast(qgraphicsitem *item)
如果 item 是類型 t傳回指定 item 轉換為類型 t否則傳回 0。
下面以擷取 qgraphicsscene 中的所有 items 為例
首先根據 type() 判斷 item 的類型。然後通過 qgraphicsitem_cast 進行轉換。這樣既可以通路标準 item也可以通過 qgraphicsproxywidget 通路 qwidget以及通路自定義 item。