Я создал QPropertyAnimation
и подключил его к своему SonogramWidget
, который прокручивает длинную картинку вертикально по событиям анимации. «Длинная картинка» состоит из 100 предварительно рассчитанных объектов QPixmap размером 1024x128, расположенных друг за другом по вертикали. Они отображаются в SonogramWidget::paintEvent()
с QPainter
. Процедура рисования рисует не все QPixmap
сразу, а только видимые из них, учитывая высоту виджета и текущее вертикальное смещение. Процессор почти свободен, потому что QPixmap
— самый быстрый способ отображения картинки. При прокрутке нет больших вычислений, потому что все 100 QPixmaps
предварительно вычисляются и сохраняются в памяти.
Я вижу странный эффект: пульсирующее движение: 2 раза в секунду все изображение немного ускоряется и перемещается вверх на 1..2 пикселя быстрее, чем обычное движение. Тот же эффект, когда я заменяю Qt Animation Framework одним QTimer со скоростью 60 кадров в секунду и прокручиваю изображение в его слоте.
Видео: http://www.youtube.com/watch?v=KRk_LNd7EBg#t=8 (смотреть с 00:08; мой firefox добавляет больше обрезания к самому воспроизведению видео, google chrome воспроизводит видео намного лучше).
Я вижу тот же эффект для моей сборки Linux и Windows.
РЕШЕНИЕ Я разобрался с проблемой: "обрезка" была не ошибкой, а функцией! Это особенность вычисления целых чисел, поэтому иногда нам приходилось использовать разные числа для анимации, например: 16,16,16,16,16,16,17
,16,16,16,16,16,17
,. ...
17
,16,16,16,16,16,17
, .... - person pavelkolodin   schedule 03.09.2013