QGraphicsScene Grid View of Pixmaps
Вопрос
Я хотел бы реализовать «сетку» Pixmaps. Вот как я бы хотел, чтобы пользовательский интерфейс вел себя: вы нажимаете кнопку, и он показывает QGraphicsView с QGraphicsScene (выполнено), и тогда я хотел бы показать все мои QPixMaps в сетке. Я на самом деле не хочу видеть сетку, которую я просто хочу организовать Pixmaps, такие как 10 столбцов (Pixmaps) PR. ROW, а затем пробелистое пробел 10PX между каждым Pixmap. (не сделано). Как это будет реализовано? Изменить: вот что я сделал до сих пор (что дает результат, описанный во втором комментарии)
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();
Ох, и, кстати, каждый Pixmap - 64x64px :)
Решение
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)
Между каждым последовательным различным есть только 64 пикселя x
компенсировать. Вам нужно 74 пикселя - размер Pixmap плюс размер границы.
Установите несколько переменных для вашего изображения с высотой, горизонтальным и вертикальным интервалом, и ваш код должен выглядеть как:
pixmap.setPos(x * (width+hspacing) + offsetx, y * (height+vspacing) + offsety);
А offsetx/y
Вероятно, выглядели бы лучше, если бы они были наполовину соответствующими расстоянием, оцениваемым для того, чтобы получить «центрированную сетку».