2011-12-04 6 views
0


pixmapsの「グリッドビュー」を実装したいと思います。これは私がUIを動作させる方法です:ボタンをクリックすると、QGraphicsScene(完了)を含むQGraphicsViewが表示され、次にすべてのQPixmapsをグリッドビューに表示したいと思います。私は実際にグリッドを見たいとは思っていません。私はちょうど10列(pixmaps)のようなピクスマップを整理したいと思います。各ピクスマップの間に10ピクスの空白があります。 (まだ完成してない)。これはどのように実装されますか? 編集:ここに私はこれまで何をやったかだ(第2のコメントで説明した結果を生成する)
QGraphicsSceneのpixmapsグリッドビュー

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です:)

+0

グリッドを描画しようとしました。しかし、私が試みるたびに最初のpixmapの前に10pxのギャップしか表示されないので、私はできません。その後、それらはすべて互いの直後に配置されています:) – Benjamin

+0

コードを投稿して、人々がどのように修正できるかを確認できるようにします。 – Mat

+0

完了。投稿を見てください:) – Benjamin

答えて

1
pixmap.setPos(x * 64 + 10 , y * 64 + 10); 

Fiのために紙の上にそれを書き留め最初の数値:

x = 0, y = 0 => pos = (10, 10) 
x = 1, y = 0 => pos = (74, 10) 
x = 2, y = 0 => pos = (138, 10) 

オフセットx各連続の間で異なる唯一の64ピクセルがあります。ピックスマップのサイズにボーダのサイズを足した74ピクセルが必要です。

高さ、水平および垂直方向の間隔、とあなたのイメージのためのいくつかの変数を設定し、あなたのコードは次のようになります。

彼らが得るために大切なの半分、それぞれの間隔であれば offsetx/yはおそらく見た目が良くなり
pixmap.setPos(x * (width+hspacing) + offsetx, y * (height+vspacing) + offsety); 

グリッドは「センタリングされた」。

+0

私はあなたが何を意味するか正確にはわかりません。あなたは私の誤った計算を実現させましたが、私はあなたの方程式を理解していませんか? xとyが行と列の数で、幅と高さがピクスマップの大きさで、hspacingとvspacingが各ピクスマップ間に必要なピクセルのギャップを表しているとすれば、offsetxとoffsetyは何ですか? – Benjamin

+0

それはまさにそれです。 – Mat

+0

あなたは精巧にお考えですか? – Benjamin

関連する問題