Рисуем с использованием текстурированной QBru sh без перевода текстуры - PullRequest
0 голосов
/ 11 марта 2020

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

scene.setSceneRect(0, 0, 1000, 1000);
ui->g_view->setScene(&scene);

QPixmap texture("block.png");
QBrush brush(texture);

int count = 0;
for(int x=0; x<1000; x += 50) {
    for(int y=0; y<1000; y += 50) {
        if (count % 2 == 0) {
            scene.addRect(x, y, 50, 50, Qt::NoPen, brush);
        }
        count++;
    }
    // Offset rows by 1
    count++;
}

Это прекрасно работает:

enter image description here

Однако, когда я изменяю код так, чтобы прямоугольники отображались «вне сетки»:

scene.addRect(x + 5, y + 5, 50, 50, Qt::NoPen, brush);

Получается следующий вывод:

enter image description here

Я ожидал, что каждый вызов addRect будет каждый раз рисовать текстуру, начиная с верхнего угла.

Однако для некоторых Причина: qt переводит текстуру, используя местоположение, в котором она также рисуется, почти как текстура бесконечно выложена плиткой на заднем плане, а addRect просто вырезает окно.

Как заставить drawRect вести себя так, как я ожидал, т.е. независимо от того, какие значения x и y являются текстурой, она всегда рисуется из верхнего левого угла.

Редактировать: block.png

enter image description here

1 Ответ

0 голосов
/ 12 марта 2020

Я решил эту проблему, вместо этого используя метод addPixmap.

//scene.addRect(x + 5, y + 5, 50, 50, Qt::NoPen, brush);
QGraphicsPixmapItem *pix_map = scene.addPixmap(texture);
pix_map->setPos(x + 5, y + 5);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...