Я создал QPropertyAnimation
и подключил его к моему SonogramWidget
, который прокручивает длинное изображение по вертикали на событиях анимации. «Длинное изображение» состоит из 100 предварительно вычисленных объектов QPixmap 1024x128, расположенных один за другим по вертикали. Они отображаются в SonogramWidget::paintEvent()
с QPainter
. Процедура рисования краска не все QPixmap
сразу, но только видимая из них, учитывая высоту виджета и текущее вертикальное смещение. CPU почти свободен, потому что QPixmap
- это самый быстрый способ отображения изображения. Во время прокрутки больших расчетов нет, потому что все 100 QPixmaps
предварительно вычисляются и сохраняются в памяти.Чоппи-прокрутка QPixmap с использованием Qt Animation Framework
Я вижу странный эффект: пульсирующее движение: 2 раза в секунду все изображение слегка ускоряется и поднимается на 1..2 пикселя быстрее обычного движения. Тот же эффект, когда я заменяю Qt Animation Framework одиночным 60 fps QTimer и прокручиваю изображение в своем SLOT.
Видео: 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
,. ...
Какова ваша загрузка процессора? Прокрутка становится медленнее, тем больше «белых» видно. Так как для QPainter не должно быть никакого значения, будет ли пиксель рисовать белым или черным, это должно быть что-то с вашими оценками. Если ваша машина близка к ее пределу, я бы ожидал странных выходных артефактов, подобных этому. Или это «становится медленнее» оптической иллюзией? Не уверен. – Greenflow
Все QPixmaps предварительно вычисляются и сохраняются в памяти. Никаких расчетов при прокрутке. С только черными пикселями все изображение меньше контрастирует, и мы не замечаем описанный эффект. – pavelkolodin
Я понятия не имею, поэтому это чистое догадки. Но иногда это помогает. :-) Итак, возможно ли разместить все в одной pixmap? Только временное? Просто чтобы исключить, что каким-то образом 100 вертикальных QPixmaps взаимодействуют странно? – Greenflow