簡體   English   中英

Qt4:使用QGraphicsView的“子視圖”

[英]Qt4: “subview” using QGraphicsView

使用QGraphicsView / QGraphicsScene / QGraphicsItem,我需要創建另一個QGraphicsItem的多個視圖。

換句話說,在QGraphicsScene中,我需要創建多個QGraphicItems,這些QGraphicItems顯示存儲在屏幕外某個地方的其他QGraphicsItem的一部分。 這有點像模型/視圖框架,其中一個QGraphicsItem的行為類似於模型,而其他QGraphicsItems的行為類似於視圖-顯示(剪切)另一項的一部分。 (見附圖) 圖片

我怎樣才能做到這一點? 請注意,“視圖”不應為只讀。 每個視圖應對鼠標移動,鍵盤輸入做出反應,並且當模型中的某些項目發生更改時應正確重繪自身。

最愚蠢的方法是將隱藏的項目繪制到QImage上,然后在其他項目中顯示該QImage的部分。 但是,這將浪費大量內存。 還有其他方法嗎?

Qt 4.8,VC2008 Express,Windows平台。

- 編輯 -

我需要顯示場景的場景(或屏幕外的QGraphicsItem)的部分。 這有點像3D游戲中的門戶。

經過研究,我發現(據我所知)Qt尚無(已記錄)這種情況的方法。

所以我決定寫一些我自己的方法

  1. 將QGraphicsItems層次結構繪制到任何QPaintDevice(遍歷子層次結構+對涉及的所有項目調用paint()方法)
  2. 將來自任何區域的輸入(鼠標/鍵盤)事件轉換為選定的QGraphicsItem。

這實際上可能有點棘手,因為我需要處理裁剪(按形狀裁剪子項的項目)並重畫QGraphicsWidget之類的復雜組件,但據我所知可以完成。 同樣,這樣做,我將失去QGraphicsView提供的BSP優化,但是對於我的特殊情況,這應該是可以接受的折衷方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM