2016-09-30 58 views
1

我正在使用圖形視圖框架將運行時項目添加到視圖中。項目將像垂直佈局一樣放置在另一個之下。QGraphicsView在調整大小時的項目位置邊距

我總是把我的物品放在場景的開始位置(10,10)。但在調整觀點的同時,保證金也在調整。每次查看窗口大小時如何保持相同的邊距?

我用Google搜索,發現

QTransform Matrix(1, 0, 0, 0, 1, 0, 0, 0, 1); 
Matrix.scale(width()/sceneRect().width(), height()/sceneRect().height()) 
setTransform(Matrix); 

有助於恢復保證金,但它也縮小基於視圖高度比的項目。

即使視圖控件縮小或展開,我也一直希望保持相同的項目大小。滾動條必須出現。

回答

1

QGraphicsView是一個場景的視口。你提到在視圖中添加事物,這不是你正在做的事情;你將它們添加到場景中,然後視圖將它們可視化。這可能是你已經明白,但只是要清楚。

我認爲你想要做的是當你調整視圖大小時,你希望像素到場景的關係保持不變,並且你希望視圖的原點「粘」到場景的原點。你提到了一個保證金,但是場景/視圖關係中沒有這樣的內容,所以這是你必須保持自己的東西。換句話說,您只需在場景中放置任何項目即可在場景中創建邊距,然後您必須翻譯視圖,以便場景中的邊緣區域始終位於視圖的視口內。這是我認爲你遇到麻煩的第二部分。

我建議你在調整視圖大小時檢查視圖的變換矩陣。 m11和m22值是縮放因子,它們顯示視圖的像素如何映射到場景座標上,dx和dy是翻譯因子,它們顯示視圖的原點和場景的原點之間的關係。

+0

感謝您的明確回覆。是的,我只將項目添加到場景中。說場景座標是(0,0,1000,1000),我把這個項目放在QPoint(18,12)上以保持空白的差距。但是當我調整視圖窗口的大小時,這些邊界正在增加。我添加的代碼行將有助於維持保證金,但也縮放該項目,但我不得不忽略項目收縮。 – Wagmare

+0

我必須親自編寫代碼才能確定,但​​如果您檢查這些轉換矩陣值,我認爲您會發現在調整視圖大小時縮放因子(m11和m22)保持不變。我想你需要繼承QGraphicsView並覆蓋resizeEvent,然後在那裏重新設置QGraphicsView的比例因子。 – goug

+0

當然我會做它goug ..非常感謝你。我會根據您的建議更新並在此回覆您。 – Wagmare

相關問題