2013-04-17 55 views
1

我正在使用Qt(當前爲4.8)來顯示大量QGraphicsScene項目的文字圖的應用。我想用比例來說明視圖。我對比例尺的要求是它在視口控件中永久固定。每當視圖縮放變化時(放大等),它都需要更新。還有其他可能的覆蓋項目(指南針等),所以我更喜歡一個通用的解決方案。爲QGraphicsView場景創建一個永久靜態覆蓋

我已經看過解決此其前面的問題建議:

  • 使用ItemIgnoresTransform
  • 使用覆蓋像素圖。

我試過IgnoresTransform,但這種方式沒有正常工作:我想不出如何解決它在適當的位置(說)在視口的底角,並有一些困難獲取文本和行始終以正確的尺寸顯示。

我放棄了QGraphicsView和subclassed QGraphicsView,通過重新實現paintEvent(調用原始的一個,然後繪製頂部的重疊像素圖)添加一個重疊像素圖,以及一個對齊選項來指示它的去向。編碼一些像素圖塗料代碼在視圖上產生可用的比例。好極了! ......但它並不適用於卷軸 - 我會在整個範圍內得到「破碎」的刻度,或者根本沒有刻度。我認爲這是因爲QGraphicsView :: scrollViewportBy()使用viewport() - > scroll(),所以我想知道是否切換到ViewportSmartUpdate會有所幫助,但沒有足夠的幫助。我不想切換到ViewportFullUpdate,因爲這可能會導致應用程序速度過慢(場景中有數百萬個項目,並且需要完全重新繪製才能移動)。

所以。來自這裏的任何想法?將適應我的pixmap代碼寫入一個新的大多數透明的Widget覆蓋在視口是一個更好的方法?

感謝您的幫助......

回答

1

雖然它可能不是這樣做的最佳途徑,在過去,我已經添加自定義小部件到持有的QGraphicsView/QGraphicsScene,它們具有相同的窗口圖形樣式作爲場景中的QGraphicObjects。當視圖然後用於移動場景中的對象或場景本身時,窗口上的項目保持在相同的位置。
希望有所幫助。

+0

是的,玩過後,這似乎是最好的方式。謝謝。 – rivimey