我想实现pixmaps的“网格视图”。这就是我想要UI的行为:你点击一个按钮,它会显示一个带有QGraphicsScene(完成)的QGraphicsView,然后我想在网格视图中显示我的所有QPixmaps。我实际上并不想看到一个网格,我只想组织像10列(pixmaps)pr这样的像素图。行,然后在每个像素映射之间的10px空白。 (尚未完成)。这将如何实施?
编辑:这是我到目前为止所做的(产生第二条评论中描述的结果)
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 :(得分: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
可能看起来更好,如果它们是相应间距的一半,以使网格“居中”。