Question


Je voudrais mettre en œuvre une « vue sur la grille » de pixmaps. Voilà comment je voudrais l'interface utilisateur à se comporter: vous cliquez sur un bouton et il montre un QGraphicsView avec une QGraphicsScene (fait) et je voudrais montrer tous mes QPixmaps en vue de la grille. Je ne veux pas vraiment voir une grille, je veux juste organiser les pixmaps comme 10 colonnes (pixmaps) pr. rangée, puis une espace de 10px en entre chaque pixmap. (pas fini). Comment cela serait-il mis en œuvre? EDIT: Voici ce que je l'ai fait jusqu'à présent (qui produit les résultats décrits dans le deuxième commentaire)

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 étend QGraphicsScene et est ajouté à un QGraphicsView comme ceci:

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, et par la façon dont chaque pixmap est 64x64px:)

Était-ce utile?

La solution

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

Ecrire que sur le papier pour les premières valeurs:

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

Il y a seulement 64 pixel différent entre chaque x successive de décalage. Vous avez besoin de 74 pixels - la taille de la pixmap plus la taille de la frontière

.

Définir quelques variables pour votre image avec, hauteur, espacement horizontal et vertical, et votre code devrait ressembler à:

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

Le offsetx/y chercherais probablement plus agréable si elles étaient la moitié de l'espacement respectif une valeur pour obtenir la grille « centrée ».

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top