Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Qt] QGraphicsScene odświeżanie wybranego fragmentu

Ostatnio zmodyfikowano 2013-03-22 22:30
Autor Wiadomość
sajmon
Temat założony przez niniejszego użytkownika
[Qt] QGraphicsScene odświeżanie wybranego fragmentu
» 2013-03-21 01:42:15
Witam :)
Borykam się z takim problemem, że nie umiem odświeżyć fragmentu QGraphicsScene :(
Chodzi o to, że mam dość duży obszar np 5000x5000[px] i wszędzie jest wyświetlony jakiś item
i po każdej zmianie itema QGraphicsView odświerza całą scenę, ale niestety niezależnie od wyboru flagi odświeżania (minimalne, inteligentne itp) odświeżany jest cały obszar :( tak do około 2500x2500[px] nic to nie zmienia, ale powyżej zanim wszystko się odświeży mijają jakieś 2 sekundy :(
Teraz jak próbowałem sobie z tym poradzić:
Dla QGraphicsView ustawiłem flagę NoViewportUpdate, żeby sam się nie odświeżał, następnie podłączyłem sobie sygnał changed ze sceny oczywiście prostokąt jaki mi zwraca do odświeżenia to cały 5000x5000, więc wstawiam swoje wymiary czyli pozycje i wielkość jednego itemka (i jeszcze wywołuję wyświetlenie warstwy(grupy itemków) bo flaga NoViewportUpdate chyba wsztsko ukrywa)
C/C++
void EditorWindow::mapUpdate( QList < QRectF > )
{
    QList < QRectF > ml;
   
    ml.insert( 0, QRectF( QPointF( editorScene->mousePos.x() * editorScene->tileW,
    editorScene->mousePos.y() * editorScene->tileH ),
    QSizeF( editorScene->tileW, editorScene->tileH ) ) );
   
    editorScene->layersGroupsList.at( editorScene->currentLayerIndex )->show();
    editorScene->update( ml.at( 0 ) );
    ui->graphicsView->updateScene( ml );
}
No i oczywiście nie działa :(
Czy ktoś robił coś podobnego lub ma pomysł jak to rozgryźć :( ?
P-79000
DejaVu
» 2013-03-21 13:56:08
http://www.qtcentre.org/threads/37981-Performance-issue-with-complex-QGraphicsScene


Next, we set the viewport update mode of the QGraphicsView to FullViewportUpdate as a QGLWidget cannot perform partial updates. Thus, we need to redraw everything whenever a part of the scene changes.
Źródło: http://doc.qt.digia.com/qq/qq26-openglcanvas.html
P-79004
sajmon
Temat założony przez niniejszego użytkownika
» 2013-03-21 16:47:59
Wilkie dzięki :D
Nie wczytywałem się jeszcze mocno w to, ale widzę, że metoda polega na cachowaniu elementów co na pewno bardzo zwiększy wydajność w moim przypadku :)))
No to trzeba sobie to zaimplementować :)
Pojawia się tylko pytanie po co deweloperzy Qt udostępniają metodę update dla określonego regionu jak ona tego regionu nie odświerza (odrysowuje) :/
P-79029
DejaVu
» 2013-03-22 22:30:54
Używając sprzętowych możliwości karty graficznej nie ma sensu odświeżać fragmentów obrazu. Problem leży w kodzie, a nie w mechaniźmie renderującym. Nawet w OpenGL-u da się tworzyć wolne aplikacje jak się nie umie z niego właściwie korzystać.
P-79172
« 1 »
  Strona 1 z 1