У меня есть картинка с научными графическими данными 1024x100500 пикселей. То есть, ширина обычная, длина потенциально бесконечная.
Юзер прокручивает эту картинку как веб-страницу в моём GUI. Я оперирую картинкой как таблицей блоков 1024x128 и показываю нужный участок картинки по принципу гугл-мэпс: юзер прокрутил до определённого региона, я вытаскиваю опр. поеледовательность блоков и показываю. Для оптимизации, в памяти храню максимум N блоков, переиспользуя их под новые участки.
Для хранения блоков используется QPixmap, ибо это обёртка над хранящимися данными в памяти иксов/или виндового графического ядра, в удобном для ядра и видеокарты формате. То есть, быстрее вывести в окно массив пикселей будет тяжело.
Теперь я хочу режим, в котором свежие поступающие данные дорисовываются к картинке снизу (новыми линиями) и юзер видит появление этих линий не дожидаясь формирования целых блоков высотой 128. Для красоты вопроса допустим, что частота появления новых линий - 30fps, а если больше - пускай сразу по нескольку дорисовываются.
Рисовать в Qt принято в QImage, который хранит данные в памяти процесса в удобном для изменения виде. Но показывать этот QImage - гораздо более тормозная процедура, чем показывать QPixmap.
Можно: 1) Показывать уже готовые блоки как QPixmap, а новые линии рисовать на временном QImage и его же показывать. То есть, показывать N QPixmap-ов и один QImage. На современном железе это наверное даже не будет тормозить даже на 30fps. Не замерял.
2) Создать 128 временных QPixmap и использовать очередной из них под новую линию, а при использовании их всех - сбрасывать в новый большой QPixmap и продолжать рисование на временных. Недостаток: при высоте экрана 1200px, я покажу всю картинку всего за 8 вызовов «покажи большой QPixmap», а последний дорисовывающийся блок будет требовать 127 вызовов «покажи мелкий QPixmap». Незнаю даже что хуже, этот или первый способ.
Ну, вопрос: чё делать-то? )