Название: Рисование без сохранения объектов Отправлено: 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 и там рисуй весь массив! В этом случае мне придется перерисовывать весь массив каждый раз, а за один раз меняется всего одна клетка...Хотелось бы нарисовать только эту клетку, а остальные не трогать. |