Frage


Ich möchte eine "Netzansicht" von Pixmaps implementieren. Auf diese Weise möchte ich, dass die Benutzeroberfläche sich verhalten kann: Sie klicken auf eine Schaltfläche und es zeigt eine QGraphicsView mit einer QGraphicsScene (Fertig) und möchte dann alle meine Qpixmaps in einer Gitteransicht anzeigen. Ich möchte eigentlich kein Gitter sehen, das ich nur die Pixmaps wie 10 Spalten (Pixmaps) PR organisieren möchte. Reihe und dann ein 10px-Weißwinkel zwischen jeder Pixmap. (nicht durchgeführt). Wie würde dies implementiert werden? Bearbeiten: Hier ist, was ich bisher gemacht habe (was das im zweite Kommentar beschriebene Ergebnis erzielt)

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 erweitert QGraphicsScene und wird zu einem QGraphicsView wie folgt hinzugefügt:

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 und übrigens ist jede Pixmap 64x64px :)

War es hilfreich?

Lösung

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

Schreiben Sie das auf Papier für die ersten Werte auf:

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

Es gibt nur 64 Pixel zwischen jedem aufeinanderfolgenden x Offset. Sie benötigen 74 Pixel - die Größe des Pixmap plus der Größe des Randes.

Stellen Sie ein paar Variablen für Ihr Bild mit, Höhe, horizontaler und vertikaler Abstand ein, und Ihr Code sollte aussehen wie:

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

Das offsetx/y Ich würde wahrscheinlich schöner aussehen, wenn sie die Hälfte des jeweiligen Abstands bewerten würden, um das Netz "zentriert" zu machen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top