QGraphicsScene pixmaps网格视图

时间:2011-12-04 09:30:54

标签: java qt qt-jambi


我想实现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:)

1 个答案:

答案 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可能看起来更好,如果它们是相应间距的一半,以使网格“居中”。