2009-10-19 152 views
0

很簡單的Qt GUI應用程序:的QGraphicsItem取消選擇重繪問題

  • 在現場我有作爲的QGraphicsItem
  • boundingRect實現了多圈返回平方左右 這個圈子。
  • 方法'形狀'沒有被覆蓋。

的問題時,在paint()方法我已經添加出現:

if (isSelected()) { 
    painter->drawRect(re); 
} 

選擇繪製好,但去除選擇不會引起重繪。在日誌級別,我可以看到該項目真的失去了選擇標誌。 從itemChange調用update()也沒用。 非常感謝您提出任何建議。

回答

0

10天后,我回到這個問題,發現我的QGraphicsItem構造與 setCacheMode(DeviceCoordinateCache); OMG!愚蠢的錯誤,當這一行被刪除(默認使用QGraphicsItem :: NoCache)選擇很好地重畫。

+0

你能解釋我爲什麼這個標誌setCacheMode正在創建問題..現在我正面臨同樣的問題。如果我使用此標誌設置QGraphicsProxyWidget,則它不會正確顯示標籤,直到我將視口設置爲opengl。 – Wagmare

+1

@Wagmare它很簡單 - 因爲邊框周圍的項目沒有出現在緩存中。 DeviceCoordinateCache級別的緩存太好,這就是爲什麼沒有出現邊界更改的原因。 – Dewfy

+0

thx非常有用的回覆..所以我如何使用QGraphicsProxyWidget上的緩存,因爲我需要添加超過一千個項目它需要使用緩存。 – Wagmare

0

您還可以嘗試使用setViewportUpdateMode(QGraphicsView :: FullViewportUpdate)將默認QGraphicsView :: MinimalViewportUpdate更改爲FullViewportUpdate;或者你可以調用scene() - > update();從項目安排重繪。

至少當我不斷更改項目上的QGraphicsItem :: ItemHasNoContents標誌時,其中一個是必需的。