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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QGraphicsScene/View QGraphicsSvgItem drawBackground  (Прочитано 1935 раз)
Alucard
Гость
« : Февраль 09, 2014, 02:43 »

У вьюхи переопределен drawBackground, в нем отрисовывается содержимое svg с пом. QSvgRenderer
На сцене n-ное кол-во QGraphicsSvgItem'ов, которые в зависимости от определенных событий (нажатия мыхой) изменяются с пом. setElementId подобным образом:

Код:
...
    currentTile->setElementId(boardLayout.tileId);
    QRectF r = currentTile->mapRectToScene(currentTile->boundingRect());
    scene->invalidate(r);
    view->update(view->mapFromScene(r));
...
Проблема в следующем:
Собственно сам итем изменяется на новый, но в (полу)прозрачных областях получаются артефакты. При инвалидации сцены полностью, этих артефактов не наблюдается, но меня не устраивает скорость реакции в этом случая. Изменения итема происходит в некоторых случаях вплоть до секунды, что недопустимо. Так же подобные артефакты отсутствуют при установке QGraphicsSvgItem-background'а вместо drawBackground. Но такой вариант меня тоже не устраивает.

Как решить эту проблему?

з.ы.
вьюха не кешируется
Код:
    view->setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
    view->setCacheMode(QGraphicsView::CacheNone);
итемы аналогично
Код:
	tile->setCacheMode(QGraphicsItem::NoCache);
Qt-4.8.4  ->  Windows7(mingw-4.7) / Linux x86(gcc-4.8.1)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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