Плавная прокрутка QPixmap с использованием Qt Animation Framework

я создал QPropertyAnimation и подключил его к моему SonogramWidget которые прокручивают длинную картинку вертикально на события анимации. «Длинное изображение» состоит из 100 предварительно рассчитанных объектов QPixmap 1024×128, расположенных один за другим вертикально. Они отображаются в 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, ….

0

Решение

в paintEvent добавить следующее утверждение:

Q_ASSERT(m_animation->currentValue() == m_animatedPropertyValue);

Если это срабатывает, то вы знаете, что вы должны использовать currentValue() вместо значения свойства. Это может быть так. Дай мне знать.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]