Russian Qt Forum
Ноябрь 23, 2024, 08:44 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблема при обновлении сцены  (Прочитано 2960 раз)
skaz54
Новичок

Offline Offline

Сообщений: 14


Просмотр профиля
« : Апрель 28, 2013, 20:47 »

Здравствуйте.

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

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

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

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

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

Спасибо.
Записан
_OLEGator_
Гость
« Ответ #1 : Апрель 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
Записан
skaz54
Новичок

Offline Offline

Сообщений: 14


Просмотр профиля
« Ответ #2 : Апрель 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

Вот в чем дело
Записан
_OLEGator_
Гость
« Ответ #3 : Апрель 29, 2013, 08:45 »

Потому что если ты определяешь свои графические элементы - не достаточно переопределить только отрисовку объекта.
А вообще показывай код, в телепатию играть не буду.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.084 секунд. Запросов: 23.