0


ピックスマップの「グリッドビュー」を実装したいと思います。これがUIの動作方法です。ボタンをクリックすると、QGraphicsScene(完了)を含むQGraphicsViewが表示され、すべてのQPixmapがグリッドビューで表示されます。実際にはグリッドを見たくありません。10列(ピックスマップ)のようにピックスマップを整理したいだけです。行、次に各ピックスマップの間に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();


ちなみに、各ピックスマップは64x64pxです:)

4

1 に答える 1

1
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)

x連続する各オフセット間で異なるのは 64 ピクセルのみです。74 ピクセル (ピックスマップのサイズと境界線のサイズ) が必要です。

高さ、水平および垂直方向の間隔で画像にいくつかの変数を設定すると、コードは次のようになります。

pixmap.setPos(x * (width+hspacing) + offsetx, y * (height+vspacing) + offsety);

グリッドを「中央に配置」するために値が設定されたそれぞれの間隔のoffsetx/y半分であれば、おそらく見栄えが良くなります。

于 2011-12-04T10:08:40.693 に答える