Pregunta


Me gustaría implementar una "vista de cuadrícula" de PixMaps. Así es como me gustaría que la interfaz de usuario se comportara: hace clic en un botón y muestra una vista QGraphics con un QgraphicsScene (hecho) y luego me gustaría mostrar todos mis Qpixmaps en una vista de cuadrícula. En realidad no quiero ver una cuadrícula, solo quiero organizar los Pixmaps como 10 columnas (pixmaps) PR. fila, y luego un espacio en blanco de 10 px dentro de cada pixmap. (no hecho). ¿Cómo se implementaría esto? Editar: Esto es lo que he hecho hasta ahora (que produce el resultado descrito en el segundo comentario)

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 extiende QgraphicsScene y se está agregando a una vista de Qgraphics como esta:

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();


Ah, y por cierto, cada pixmap es 64x64px :)

¿Fue útil?

Solución

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

Escriba eso en el papel para obtener los primeros valores:

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

Solo hay 64 píxeles diferentes entre cada sucesivo x compensar. Necesita 74 píxeles: el tamaño del PIXMAP más el tamaño del borde.

Establezca algunas variables para su imagen con, altura, espaciado horizontal y vertical, y su código debe verse como:

pixmap.setPos(x * (width+hspacing) + offsetx, y * (height+vspacing) + offsety);

los offsetx/y Probablemente se vería mejor si fueran la mitad del espacio respectivo valorado para que la cuadrícula se "centrara".

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top