2011-12-04 64 views
0


我想實現一個pixmap的「網格視圖」。這就是我希望UI行爲的方式:你點擊一個按鈕,它顯示一個帶有QGraphicsScene的QGraphicsView(完成),然後我想在網格視圖中顯示所有的QPixmaps。我實際上並不想看到一個網格,我只想組織10像素(pixmaps)公關像素圖。行,然後在每個pixmap之間插入一個10px的空格。 (尚未完成)。這將如何實施? 編輯:這裏是我到目前爲止(產生在第二註釋中所描述的結果)
QGraphics 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

我已經嘗試繪製網格。但我不能,因爲我每次嘗試它都只會在第一個像素圖之前顯示10px的距離。之後,他們全都定位在彼此之後:) – Benjamin

+0

然後發佈您的代碼,以便人們可以看到它是如何修復的。 – Mat

+0

完成。看看帖子:) – Benjamin

回答

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

記下來在紙面上的網絡連接RST幾個值:

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.setPos(x * (width+hspacing) + offsetx, y * (height+vspacing) + offsety); 

offsetx/y可能會更好看,如果他們各自的間距的一半價值得到網格「居中」。

+0

我不完全確定你的意思..你讓我意識到我的錯誤計算,但我不明白你的等式?假設x和y是行和列的數字,寬度和高度是像素圖的維度,而hspacing和vspacing則表示像素之間的間距,我想要在每個像素圖之間,偏移x和偏離什麼? – Benjamin

+0

就是這樣。 – Mat

+0

你介意闡述嗎? – Benjamin