QGraphicsScene сетка просмотра растровых изображений - PullRequest
0 голосов
/ 04 декабря 2011

Я хотел бы реализовать «сетку» растровых изображений.Вот как я хотел бы, чтобы пользовательский интерфейс вел себя: вы нажимаете кнопку, и она показывает QGraphicsView с QGraphicsScene (готово), а затем я бы хотела показать все мои QPixmaps в виде сетки.Я на самом деле не хочу видеть сетку, я просто хочу организовать растровые изображения как 10 столбцов (растровые изображения) pr.строка, а затем 10px пробел между каждым растровым изображением.(не выполнено).Как это будет реализовано?РЕДАКТИРОВАТЬ: Вот что я сделал до сих пор (что дает результат, описанный во втором комментарии)

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

Да, и, кстати, каждое растровое изображение имеет размер 64x64px:)

1 Ответ

1 голос
/ 04 декабря 2011
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)

Разница между каждым последующим смещением x составляет всего 64 пикселя. Вам нужно 74 пикселя - размер растрового изображения плюс размер границы.

Установите несколько переменных для вашего изображения с высотой, горизонтальным и вертикальным интервалом, и ваш код должен выглядеть следующим образом:

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

offsetx/y, вероятно, выглядел бы лучше, если бы они составляли половину соответствующего промежутка, оцененного для "центрирования" сетки.

...