Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: Crazy Sage от Январь 28, 2015, 14:29



Название: (РЕШЕНО) Принудительный вызов QGraphicsScene::drawBackground() [Qt4.4]
Отправлено: Crazy Sage от Январь 28, 2015, 14:29
Доброго всем дня, возникла тут проблема с которой нужна помощь.
Есть проект с классом унаследованным от QGraphicsScene с перегруженной функцией drawBackground(), в которой отрисовка происходит не каждый раз, а только когда на сцене нет определённого типа объектов, которые гарантированно перекрывают то, что должно отрисовываться на фоне, но удаление объектов не является для сцены поводом перерисовать подложку. Вопрос - как принудительно вызвать drawBackground()? QGraphicsView::update(), QGraphicsView::viewport()->update() и QGraphicsView::scene()->update() ничего не дают.


Название: Re: Принудительный вызов QGraphicsScene::drawBackground() [Qt4.4]
Отправлено: GreatSnake от Январь 28, 2015, 14:46
но удаление объектов не является для сцены поводом перерисовать подложку.
Неправда, является.

Цитировать
QGraphicsView::viewport()->update() и QGraphicsView::scene()->update() ничего не дают.
Не верю.


Название: Re: Принудительный вызов QGraphicsScene::drawBackground() [Qt4.4]
Отправлено: Crazy Sage от Январь 28, 2015, 14:51
Тем не менее, и по отладочной печати и по тому, что я вижу глазами - если не меняя положение прокрутки и размер сцены переключить режим отображения на содержащий\не содержащий объекты сцены, то подложка отображается нормально, но отладочной печати из drawBackground нет, если же в режиме содержащем объекты сцены, поскроллить, например, сцену, то вызывается drawBackground, проверяет режим отрисовки и затирает фон стандартной кистью, после чего при переключении режима фон пустой до первой прокрутки\изменения масштаба\изменения размера.


Название: Re: Принудительный вызов QGraphicsScene::drawBackground() [Qt4.4]
Отправлено: Fregloin от Февраль 04, 2015, 12:35
QGraphicsScene::invalidate(BackgroundLayer|ForegroundLAyer)...


Название: Re: Принудительный вызов QGraphicsScene::drawBackground() [Qt4.4]
Отправлено: Crazy Sage от Апрель 03, 2015, 14:22
После этого ещё пришлось вызвать qApp->processEvents(), но помогло, спасибо.