Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: skaz54 от Апрель 28, 2013, 20:47



Название: Проблема при обновлении сцены
Отправлено: skaz54 от Апрель 28, 2013, 20:47
Здравствуйте.

Имеется QGraphicsScene и QGraphicsView для отображения сцены. Это сторонние классы.
На основе класса отображения создал свой класс и размещаю на сцене свои графические объекты, в том числе и графические стандартные, типа QGraphicsRectItem и т.д.

Вывод своих графических объектов осуществляю в обработке метода paintEvent.

Рисование проходит нормально и правильно при нанесении объектов и при обновлении всего viewport.
Но, если изменить размеры (положение) графического объекта, то в метод paintEvent приходит событие, в котором указывается область изменения сцены, равной новому размеру (положению) объекта, а область, где ранее находился объект, не изменяется, т.е. остается "след" этого объекта.

Попытка изменить область перерисовки в методе paintEvent ни к чему не приводит.

Как быть в этом случае? Может быть есть другие методы, которые надо обрабатывать в такой ситуации?
Подскажите, пожалуйста.

Спасибо.


Название: Re: Проблема при обновлении сцены
Отправлено: _OLEGator_ от Апрель 28, 2013, 22:48
Правильно возвращать значение в переопределенных функциях
Код
C++ (Qt)
QRectF QGraphicsItem::boundingRect () const [pure virtual]
или
QRegion QGraphicsItem::boundingRegion ( const QTransform & itemToDeviceTransform ) const
И понимать, что есть еще
Код
C++ (Qt)
QPointF QGraphicsItem::pos () const


Название: Re: Проблема при обновлении сцены
Отправлено: skaz54 от Апрель 28, 2013, 23:08
Не понятно, причем здесь эти функции.
Последовательность операций следующая:
1. Текущий размер объекта rOld
2. Вычисляю новый размер объекта QRect rNew = QRect(x, y, w, h). rNew меньше rOld
3. Изменяю значение размера объекта функцией setRect(rNew)
4. Получаю событие paintEvent с прямоугольником перерисовки rNew
5. При обработки события paintEvent обновляю фон в области rNew, но оставшаяся часть rOld не обновляется, как бы я не расширял область обновления в в методе paintEvent

Вот в чем дело


Название: Re: Проблема при обновлении сцены
Отправлено: _OLEGator_ от Апрель 29, 2013, 08:45
Потому что если ты определяешь свои графические элементы - не достаточно переопределить только отрисовку объекта.
А вообще показывай код, в телепатию играть не буду.