Отсечение в виджете paintEvent

У меня проблема с отсечкой в ​​Qt. У меня есть виджет, в котором я рисую большой массив прямоугольников. Поскольку я время от времени меняю только несколько прямоугольников, я хочу нарисовать только небольшую часть виджета (только эти прямоугольники) и закрепить область рисования на этих частях.

isNew() Функция имеет значение true, если прямоугольник получает новый цвет с момента предыдущей рисования.

void Environment::paintEvent(QPaintEvent *event)
{
QPainter painter (this);
Tile t;

//paint the matrix
for(int i=0; i<size; ++
t = matrix[i+j*yizeY];
if(t.isNew()){
painter.setClipRegion(QRegion(t.getRect()));
painter.setBrush(t.getColor());
painter.drawRect(t.getRect());
t.used();
}
}
}

Что я делаю неправильно? Моя программа работает еще медленнее, когда я использую setClipRegion(...) функция.

0

Решение

Если вы хотите улучшить производительность, вы можете нарисовать все эти прямоугольники на QPixmap. Поскольку вы можете рисовать в растровое изображение в любое время, вы можете нарисовать плитки непосредственно в растровое изображение, когда они нуждаются в обновлении. На событии рисования вы просто рисуете «уже отрендеренное» растровое изображение.

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

1

Другие решения