Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: IGHOR от Март 28, 2008, 03:13



Название: QGraphicsView тормозит в Linux
Отправлено: IGHOR от Март 28, 2008, 03:13
Я сделал прогу на Qt4.3.4, компилил и дебаг делал под виндой с Visual Studio 2005.
Генерирую с помощью QGraphicsView+QGraphicsScene список что сочитает фотографии и текст.
Под виндой все работает супер!
А скомпилил под линуксом то при скролинге очень дергается список, тогда когда в QGraphicsView видно картинки.
Как оптимизировать это ?
Какие настройки ускорят QGraphicsView ?


Название: Re: QGraphicsView тормозит в Linux
Отправлено: IGHOR от Март 31, 2008, 03:36
Я нашел причину по какой оно тормозит..
Это когда применить scale() к любому QPixmapItem и при рендеринге его QGraphicsView очень тормозит.
Это баг Qt ? почему оно тормозит ?


Название: Re: QGraphicsView тормозит в Linux
Отправлено: Tonal от Март 31, 2008, 06:59
Потому что scale для Pixmap изрядно не дешёвая операция.
Тебе оно точно надо?
Может сначала все Pixmap-ы отмасштабировать в нужный размер, а потом уже такие показывать?


Название: Re: QGraphicsView тормозит в Linux
Отправлено: QDgara от Март 31, 2008, 13:37
Или сделай не реалтайм скейл.


Название: Re: QGraphicsView тормозит в Linux
Отправлено: IGHOR от Март 31, 2008, 16:31
Есть 6 фоток, они уменьшеного размера.
При клике на них мышкой сделал анимацию плавного увеличения с полетом по (y=x*x) дуге, все это делается с помощью timeline связаного с QPixmap'ом используя scale...

Потому что scale для Pixmap изрядно не дешёвая операция.
Тебе оно точно надо?
Может сначала все Pixmap-ы отмасштабировать в нужный размер, а потом уже такие показывать?
а масштабировать 100 кадров картинок будет длинная задержка..
фотки грузятся в динамическом режиме, часто перегружаются.

Или сделай не реалтайм скейл.
Это как ?


Название: Re: QGraphicsView тормозит в Linux
Отправлено: pastor от Март 31, 2008, 16:55
Можно немного оптимизировать работу с набором пиксмапов... Смасштабированные фотки складывать в QPixmapCache и доставать их потом уже из него. Т.е. фактически, масштабирование будет происходить один раз для конкретного размера. Работа через QPixmapCache должна увеличить производительность


Название: Re: QGraphicsView тормозит в Linux
Отправлено: Tonal от Март 31, 2008, 17:16
transformMode = Qt::FastTransformation?
Можно попробовать разбить твою анимацию на несколько частей. Первый кадр каждой части предвычислить, а остальные рассчитывать.
Ну и закешировать те, которые уже масштабировал.


Название: Re: QGraphicsView тормозит в Linux
Отправлено: IGHOR от Март 31, 2008, 18:07
Оно тормозит не при каждом использовании scale,
а после первого.
Пример:
Кинул фотку QGraphicsPixmap, компилю, смотрю, отображается нормально.
Далее применяю к этому QGraphicsPixmap scale(0.9,0.9) и в проге больше это не трогаю, компилю,
запускаю прогу и когда скролинг QGraphicsVeiw доходит до отображения этого QGraphicsPixmap то наченает очень тормозить QGraphicsVeiw и все что в нем (гдето 3 фпс). И так только на Линуксе, под виндой все в норме.
Комп на каком тестирую: Intel 2.2 Dual Core, 4096 Mb DDR2, GeForce 8600GT 256 MB.


Название: Re: QGraphicsView тормозит в Linux
Отправлено: IGHOR от Март 31, 2008, 22:52
transformMode = Qt::FastTransformation?
Можно попробовать разбить твою анимацию на несколько частей. Первый кадр каждой части предвычислить, а остальные рассчитывать.
Ну и закешировать те, которые уже масштабировал.
Это не помогло..
видимо один выход.. вручную кадры делать..


Название: Re: QGraphicsView тормозит в Linux
Отправлено: vaprele07 от Апрель 01, 2008, 02:58
На каждый элемент сцены можно установить размер кэша, еще можно задать моду кэшировать задний фон.


Название: Re: QGraphicsView тормозит в Linux
Отправлено: IGHOR от Апрель 02, 2008, 05:52
На каждый элемент сцены можно установить размер кэша, еще можно задать моду кэшировать задний фон.

Можно пример ?