2011-12-04 3 views
0


픽스맵의 "그리드보기"를 구현하고 싶습니다. 이것이 UI의 동작 방식입니다. 단추를 클릭하면 QGraphicsScene (완료)과 함께 QGraphicsView가 표시되고 모든 QPixmaps가 격자보기로 표시됩니다. 실제로 그리드를보고 싶지는 않습니다. 그냥 10 열 (pixmaps) pr과 같은 pixmap을 구성하고 싶습니다. 각 픽셀 맵 사이에 10 픽셀의 공백이 있어야합니다. (완료되지 않음). 이것이 어떻게 구현 될까요? 편집 :
픽스맵의 QGraphicsScene 격자보기

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(); 
: 여기에 지금까지

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에 추가되고 한 일이다


아, 그리고 방법에 의해 각 픽셀 맵은 64x64px :

+0

그리드 그리기를 시도했습니다. 하지만 매번 시도 할 때마다 첫 번째 픽스맵 이전에 10px 간격 만 표시되기 때문에 그렇게 할 수 없습니다. 그 후에, 그들은 서로의 직후에 모두 배치됩니다 :) – Benjamin

+0

코드를 게시하면 사람들이 어떻게 고칠 수 있는지 알 수 있습니다. – Mat

+0

완료. 게시물을 봐 :) – Benjamin

답변

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

는 Fi를위한 종이에 그를 기록하다 처음 몇 값 :

오프셋 각 연속 x 사이의 서로 다른 64 픽셀이있다
x = 0, y = 0 => pos = (10, 10) 
x = 1, y = 0 => pos = (74, 10) 
x = 2, y = 0 => pos = (138, 10) 

. 픽스맵의 크기와 경계의 크기를 합친 74 픽셀이 필요합니다.

높이, 수평 및 수직 간격과 이미지에 대한 몇 가지 변수를 설정하고 코드를 같이한다 :

그들이 얻을 가치의 절반 각각의 간격했다 경우 offsetx/y 아마 더 좋은 보일 것
pixmap.setPos(x * (width+hspacing) + offsetx, y * (height+vspacing) + offsety); 

그리드는 "중앙에 배치"됩니다.

+0

나는 당신이 무슨 뜻인지 정확히 모르겠다. 내 잘못 계산을 실현하게 만들었지 만 당신의 방정식을 이해하지 못합니까? x와 y가 행과 열 번호이고 width와 height가 픽스맵의 크기이고 hspacing과 vspacing이 각 픽스맵 사이에 원하는 픽셀의 간격을 나타내는 경우 offsetx와 offsety는 무엇입니까? – Benjamin

+0

그게 전부입니다. – Mat

+0

자세히 설명해 주시겠습니까? – Benjamin