Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: Alucard от Февраль 09, 2014, 02:43



Название: QGraphicsScene/View QGraphicsSvgItem drawBackground
Отправлено: 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)