我正在QGraphicsScene
上添加項目。一旦添加,項目可能會被進一步處理。如何跳過被相同的QGraphicsItems遮蔽的QGraphicsItems?
我想跳過被其他物品完全遮擋的物品。似乎有幾個QGraphicsItems
致力於這項任務。
給定兩個QGraphicsItem
對象,在一個矩形的形狀,在尺寸相同的,僅由顏色不同的,並且每個具有相同boundingRect()
,每個在完全相同的pos()
,但具有不同的zValue()
:
for(int i = 0; i < scene.items().size(); ++i)
{
if(scene.items().at(i)->isObscured())
{
continue;
}
// do work
}
我也試過
if(scene->items().at(i)->isObscured(scene->items().at(i)->boundingRect()))
這兩個選項都不會跳過看不見的項目。
如果我稍微增加頂部矩形的大小,isObscured
函數可以工作(任一版本)。但是,具有相同的形狀,一個在另一個,邏輯上的底部一個仍然被遮蔽的頂部...
會在合理的修正是在矩形的每一側添加1個像素?那會不會導致奇怪的情況?
如何讓被覆蓋的物品被跳過?
如果一件商品被其他幾件商品所覆蓋,那麼這個問題就更加複雜了,它們都沒有完全覆蓋商品。
那麼我該怎麼辦?這兩個項目是相同的,在該試驗中,用每一個都具有()塗在boundingRect固體刷矩形和沒有邊框。擴大項目是不是一種選擇,這應該是通用的... – Thalia
哦,我看到......默認實現返回一個空的QPainterPath,指示這個項目是完全透明的.'這意味着我必須添加一個實現opaqueArea'匹配對象的形狀......但是當物品有透明畫筆或組合時,我該如何處理案例... – Thalia
正如它聲明isObscuredBy「您可以重新實現此功能以提供用於確定此項目是否被項目遮擋的自定義算法。「 – TheDarkKnight