Хотя ответ уже выбран, я хотел бы высказать свое мнение.
Мне не нравится выбранный ответ, особенно из-за использования таймеров.Таймер для выгрузки растровых изображений?Скажем, что пользователь действительно хочет хорошенько взглянуть на изображение, и через пару секунд - бац, изображение выгружается, ему придется что-то сделать, чтобы изображение снова появилось.Или, может быть, вы поставите другой таймер, который загружает растровые изображения через пару секунд?Или вы проверите среди своих тысяч предметов, если они видны?Это не только очень раздражает и неправильно, но это означает, что ваша программа будет использовать ресурсы все время.Скажем, пользователь сворачивает вашу программу и воспроизводит фильм, он будет удивляться, почему мой фильм останавливается каждые несколько секунд ...
Что ж, если я неправильно понял предложенную идею использования таймеров, извините меня.
На самом деле идея, предложенная Мутцем, лучше.Это напомнило мне пример Мандельброта .Посмотрите на это.Вместо того, чтобы вычислять, что рисовать, вы можете переписать эту часть для загрузки той части изображения, которую вам нужно показать.
В заключение я предложу другое решение, использующее QGraphicsView в гораздо более простой форме:
1) проверьте размер изображения без загрузки изображения (используйте QImageReader)
2) сделайте размер вашей сцены равным размеру изображения
3) вместо использования элементов растрового изображения переопределитеФункция DrawBackground ().Один из параметров даст вам новый открытый прямоугольник - это означает, что если пользователь прокрутит чуть-чуть, вы загрузите и нарисуете только эту новую часть (для загрузки только части изображения используйте setClipRect () и затем read () методыкласса QImageReader).Если есть какие-то преобразования, вы можете получить их из другого параметра (который является QPainter) и применить их к изображению перед его рисованием.
По моему мнению, лучшим решением будет объединить мое решение с потокамипоказано в примере Мандельброта .
Единственная проблема, о которой я могу думать сейчас, - это если пользователь масштабирует с большим масштабным коэффициентом.Тогда вам понадобится много ресурсов для загрузки и масштабирования огромного изображения.Ну, теперь я вижу, что есть некоторая функция QImageReader, которую я еще не пробовал - setScaledSize (), которая, возможно, делает то, что нам нужно, - если вы установите размер масштаба, а затем загрузите изображение, возможно, оно не загрузится первымвсе изображение - попробуйте.Другой способ - просто ограничить коэффициент масштабирования, что вам все равно следует делать, если вы придерживаетесь метода с элементами растрового изображения.
Надеюсь, это поможет.