![]() |
|
![]() ![]() ![]() |
|
Ground |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 321 Регистрация: 27.2.2006 Где: Комсомольск Репутация: нет Всего: 1 |
Доброго времени суток!
Есть задача: сделать QGraphisView, где в качестве фона будет SVG изображение и несколько постоянно перерисовывающихся виджетов. Проблема: низкая производительность (в частности - скроллинг рывками), подробности - ниже. Основная сложность при решении данной задачи - перерисовывающиеся виджеты. Время обновления - 20-40мс. Вариант 1: SVG рендерится в QGraphicsView::drawBackground() с опцией QGraphicsView::setCacheMode(QGraphicsView::CacheBackground); В такой реализации загрузка CPU = 0%, но скроллинг изображения осуществляется рывками. Если убрать QGraphicsView::setCacheMode(QGraphicsView::CacheBackground); - скроллинг становится плавным, но загрузка CPU = 50% (обновляющиеся виджеты виноваты, постоянно вызывают рендеринг фона, без кеширования - очень накладно).
Вариант 2: Этот вариант аналогичен первому за тем исключением, что добавлена строка setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers))); При этом варианте скроллинг - плавный, но загрузка процессора CPU = 50%, хоть с опцией QGraphicsView::CacheBackground, хоть без нее. Код дублировать не буду. Вариант 3: SVG в QGraphicsScene добавляется через QGraphicsSvgItem с опцией QGraphicsSvgItem::setCacheMode(QGraphicsItem::DeviceCoordinateCache); Результат: скроллинг - плавный, CPU - загрузка средняя = 25%.
Код тестового виджета (ничего интересного - банальная перерисовка по таймеру):
Вот и как найти золотую середину - без тормозов при скроллинге и без загрузки CPU при прорисовке виджетов? Уже почти неделю мучаюсь с этой проблемой, перепробовал все флаги - безрезультатно. Буду очень благодарен за помощь. PS: Если нужен будет минимальный проект с наблюдаемой проблемой - могу выложить. |
||||||
|
|||||||
![]() ![]() ![]() |
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |