Domanda


Vorrei implementare una "visione della griglia" di pixmaps. È così che vorrei che l'interfaccia utente si comportasse: fai clic su un pulsante e mostra una QgraphicsView con un QgraphicsScene (fatto) e poi vorrei mostrare tutte le mie mappa QPix in una vista a griglia. In realtà non voglio vedere una griglia che voglio solo organizzare le pixmaf come 10 colonne (pixmaps) PR. riga, quindi uno spazio bianco da 10px tra ogni pixma. (non fatto). Come sarebbe implementato? EDIT: ecco cosa ho fatto finora (che produce il risultato descritto nel secondo commento)

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 estende QGraphicsScene e viene aggiunto a un QgraphicsView come questo:

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


Oh e a proposito ogni pixmap è 64x64px :)

È stato utile?

Soluzione

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

Scrivilo sulla carta per i primi valori:

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

Ci sono solo 64 pixel diversi tra ogni successivo x compensare. Hai bisogno di 74 pixel: le dimensioni della pixma più delle dimensioni del bordo.

Imposta alcune variabili per la tua immagine con, altezza, spaziatura orizzontale e verticale e il tuo codice dovrebbe apparire:

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

Il offsetx/y Probabilmente sembrerebbe più bello se fossero metà della rispettiva spaziatura apprezzata per "centrata".

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top