QGRAPHICSSCENE PIXMAPSのグリッドビュー
質問
pixmapsの「グリッドビュー」を実装したいと思います。これは、UIの動作を希望する方法です。ボタンをクリックすると、qgraphicsScene(完了)を使用してqgraphicsViewが表示され、グリッドビューにすべてのqpixmapsを表示したいと思います。私は実際にグリッドを見たくありません。10列(pixmaps)prのようなpixmapsを整理したいだけです。行、そして各pixmapの間に10pxの白い空間があります。 (まだ完成してない)。これはどのように実装されますか?編集:これまでに行ったことです(2番目のコメントで説明されている結果が生成されます)
public SpriteScene() {
super(0, 0, 800, 500);
QPixmap[] sprites = GUI.getWInterface().sprites;
List<QPixmap> l = Arrays.asList(sprites);
Iterator<QPixmap> i = l.iterator();
int rows = 10 / sprites.length;
boolean isDone = false;
for(int y = 0; y < rows; y++) {
for(int x = 0; x < 10; x++) {
if(i.hasNext()) {
QGraphicsPixmapItem pixmap = addPixmap(i.next());
pixmap.setPos(x * 64 + 10 , y * 64 + 10);
} else {
isDone = true;
break;
}
}
if(isDone) {
break;
}
}
}
spritesceneはqgraphicssceneを拡張し、次のようにqgraphicsviewに追加されています。
spriteView = new QGraphicsView(new SpriteScene(), this);
spriteView.setGeometry(0, 35, 850, 550);
spriteView.setAlignment(new Qt.AlignmentFlag[]{Qt.AlignmentFlag.AlignLeft, Qt.AlignmentFlag.AlignTop});
spriteView.hide();
ああ、ちなみに各pixmapは64x64pxです:)
解決
pixmap.setPos(x * 64 + 10 , y * 64 + 10);
それを最初のいくつかの値のために紙に書き留めてください:
x = 0, y = 0 => pos = ( 10, 10)
x = 1, y = 0 => pos = ( 74, 10)
x = 2, y = 0 => pos = (138, 10)
それぞれの連続の間に異なる64ピクセルのみがあります x
オフセット。 74ピクセルが必要です - PIXMAPのサイズと境界のサイズ。
高さ、水平および垂直間隔で画像にいくつかの変数を設定し、コードが次のように見えるはずです。
pixmap.setPos(x * (width+hspacing) + offsetx, y * (height+vspacing) + offsety);
offsetx/y
グリッドを「中心」するためにそれぞれの間隔の半分が評価されている場合、おそらく見栄えが良いでしょう。
所属していません StackOverflow