2016-09-30 4 views
1

私は、ビューに実行時にアイテムを追加するためにグラフィックスビューフレームワークを使用しています。アイテムは垂直レイアウトのように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はシーンへのビューポートです。あなたはあなたがやっていることではない、ビューに物を追加することを言及します。それらをシーンに追加してから、ビューがそれらを視覚化します。あなたは既にそれを理解しているかもしれませんが、明らかにするだけかもしれません。

あなたがしたいと思っているのは、ビューのサイズを変更すると、ピクセル間の関係が一定に保たれ、ビューの起点をシーンの原点に固定することです。マージンは言いますが、シーン/ビューの関係にはそのようなものは組み込まれていないので、それはあなた自身で維持しなければならないものです。言い換えれば、シーンにマージンを作成するだけで、そこにアイテムを配置しないと、シーン内のマージン領域が常にビューのビューポート内に入るようにビューを変換する必要があります。これは、あなたが問題を抱えていると思う2番目の部分です。

ビューのサイズを変更するときに、ビューの変換マトリックスを調べることをお勧めします。 m11とm22の値は、ビューのピクセルがシーンの座標にどのようにマップされるかを示すスケーリング係数で、dxとdyはビューの原点とシーンの原点の関係を示す変換係数です。

+0

ご返信ありがとうございます。はい、私はシーンにアイテムを追加しています。シーン座標が(0,0,1000,1000)であるとすると、マージンギャップを維持するためにQPoint(18,12)にアイテムを配置しました。ビューウィンドウのサイズを変更すると、これらの余白が増えています。私が追加したコード行はマージンを維持するのに役立つだけでなく、アイテムをスケーリングしますが、私はアイテムの縮小を無視しなければなりません。 – Wagmare

+0

私は絶対に確実にコードを書く必要がありますが、それらの変換行列の値を調べると、ビューのサイズを変更するときに、縮尺係数(m11とm22)を同じにしておきたいと思うでしょう。私はあなたがQGraphicsViewをサブクラス化し、resizeEventをオーバーライドする必要があると思うし、そこにQGraphicsViewスケールファクタをリセットします。 – goug

+0

私はそれをgougと確信しています..ありがとう。私はあなたの推薦に従って更新し、ここに返信します。 – Wagmare

関連する問題