Приветствую!
Пытаюсь рисовать... QGraphicsScene, QGraphicsView и несколько QGraphicsItem, унаследованные от общего родителя
Рисую в QGraphicsItem::paint(...) — заметные тормоза.
Родитель:
S>Приветствую! S>Пытаюсь рисовать... QGraphicsScene, QGraphicsView и несколько QGraphicsItem, унаследованные от общего родителя S>Рисую в QGraphicsItem::paint(...) — заметные тормоза.
S>Что я делаю не так? Как можно по другому?
Могу предположить, что надо отключить собственно прорисовку чего-либо до тех пор, пока все не будет нарисовано (что-то типа setupdates(off), setupdates(on)).
Здравствуйте, Sheridan, Вы писали:
S>Что я делаю не так? Как можно по другому?
Судя по коду, картинка у тебя статическая. Ее можно один раз нарисовать в QPixmap с прозрачностью, а потом просто рисовать этот pixmap одной функцией.
Приветствую, little_alex, вы писали:
l> Судя по коду, картинка у тебя статическая. Ее можно один раз нарисовать в QPixmap с прозрачностью, а потом просто рисовать этот pixmap одной функцией.
Она масштабируется и вертится....
Здравствуйте, Sheridan, Вы писали:
S>Приветствую, little_alex, вы писали:
l>> Судя по коду, картинка у тебя статическая. Ее можно один раз нарисовать в QPixmap с прозрачностью, а потом просто рисовать этот pixmap одной функцией. S>Она масштабируется и вертится....
Ничего страшного — можно запоминать картинку для каждого положения.
Подробнее смотри http://doc.trolltech.com/qq/qq12-qpixmapcache.html и доку на QPixmapCache.
Здравствуйте, Sheridan, Вы писали:
S>Что я делаю не так? Как можно по другому?
Можно еще OpenGL использовать, там где он быстрый.
To enable OpenGL rendering, you simply set a new QGLWidget as the viewport of QGraphicsView by calling QGraphicsView::setViewport(). If you want OpenGL with antialiasing, you need OpenGL sample buffer support (see QGLFormat::sampleBuffers()).
Example:
Приветствую, little_alex, вы писали:
l> Можно еще OpenGL использовать, там где он быстрый. l>
l> To enable OpenGL rendering, you simply set a new QGLWidget as the viewport of QGraphicsView by calling QGraphicsView::setViewport(). If you want OpenGL with antialiasing, you need OpenGL sample buffer support (see QGLFormat::sampleBuffers()).
l> Example:
Приветствую, little_alex, вы писали:
l> S>Она масштабируется и вертится....
l> Ничего страшного — можно запоминать картинку для каждого положения. l> Подробнее смотри http://doc.trolltech.com/qq/qq12-qpixmapcache.html и доку на QPixmapCache.
Минимум 360 пиксмапов... Не будет ли оно память откусывать много?
Здравствуйте, Sheridan, Вы писали:
S>Приветствую, little_alex, вы писали:
l>> S>Она масштабируется и вертится....
l>> Ничего страшного — можно запоминать картинку для каждого положения. l>> Подробнее смотри http://doc.trolltech.com/qq/qq12-qpixmapcache.html и доку на QPixmapCache. S>Минимум 360 пиксмапов... Не будет ли оно память откусывать много?
Размер кеша можно задать. Все, что не помещается в него (или вытеснено более новыми pixmap-ами), придется рисовать еще раз. Памяти много ИМХО не надо, достаточно, чтобы в кеш уместились несколько последних картинок.
В пользу этого способа то, что стандартные widget-ы qt именно так рисуются.
Здравствуйте, Sheridan, Вы писали:
S>Приветствую, little_alex, вы писали:
l>> Можно еще OpenGL использовать, там где он быстрый.
S>я думал об этом... Но как будут дела обстоять там где opengl нет?
Ну если OpenGL вообще нет, то не соберется QtOpenGL. А случай, что он медленный надо как-то определять ...
PS. QtDemo дико тормозит там, где OpenGL медленный ( не аппаратный )
Здравствуйте, little_alex, Вы писали:
_>Размер кеша можно задать. Все, что не помещается в него (или вытеснено более новыми pixmap-ами), придется рисовать еще раз. Памяти много ИМХО не надо, достаточно, чтобы в кеш уместились несколько последних картинок.
_>В пользу этого способа то, что стандартные widget-ы qt именно так рисуются.
Тем более, что это уже реализовано и надо только включить: