Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: Daeloce от Декабрь 23, 2010, 12:42



Название: Рисование без сохранения объектов
Отправлено: Daeloce от Декабрь 23, 2010, 12:42
Доброго времени суток всем.

Интересует следующий вопрос. Стоит задача отрисовывать массив на клетчатом поле. Если в массиве 0 то соответствующая клетка белая, если в массиве 1 то черная. Массив постоянно меняется и поле нужно постоянно перерисовывать. Сделал это через QGraphicsView и QGraphicsScene, клетку рисую с помощью addRect. Но беда в том, что QGraphicsScene запоминает все объекты(в данном случае прямоугольники) которые на нем отрисовываются. В итоге при постоянно меняющемся массиве и постоянно перерисовываемом поле течет память.

Вопрос, можно ли средствами Qt просто нарисовать прямоугольник, без создания соответствующего объекта у QGraphicsScene(средствами Qt я имею в виду, не создавая свой виджет с переопределением paintEvent)?


Название: Re: Рисование без сохранения объектов
Отправлено: alexman от Декабрь 23, 2010, 12:46
Сделай наследника QGraphicsItem и там рисуй весь массив!


Название: Re: Рисование без сохранения объектов
Отправлено: Kolobok от Декабрь 23, 2010, 12:52
Почитай про Model/View Programming в ассистенте. Потом посмотри Pixelator Example.


Название: Re: Рисование без сохранения объектов
Отправлено: Daeloce от Декабрь 23, 2010, 14:16
Сделай наследника QGraphicsItem и там рисуй весь массив!

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


Название: Re: Рисование без сохранения объектов
Отправлено: GreatSnake от Декабрь 23, 2010, 16:22
Если размер массива фиксированный, то создаёшь клетки, расставляешь их и уже потом в зависимости от состояния массива просто меняешь цвет клетки через setBrush().


Название: Re: Рисование без сохранения объектов
Отправлено: alexman от Декабрь 23, 2010, 18:44
Сделай наследника QGraphicsItem и там рисуй весь массив!

В этом случае мне придется перерисовывать весь массив каждый раз, а за один раз меняется всего одна клетка...Хотелось бы нарисовать только эту клетку, а остальные не трогать.
Храни pixmap и перерисовывай в нем только нужую ячейку!