Я пытаюсь создать приложение, которое отображает PDF-файл, используя PyQt4 и python-poppler-qt4.Каков наиболее эффективный способ отображения нескольких растровых изображений в области прокрутки?
До сих пор мне удалось отобразить весь документ, загрузив pixmaps, сгенерированные с помощью Poppler, установленные в QLabel и добавленные в QFrame. QFrame отображается в QScrollArea.
Он выглядит довольно неплохо, пока не выполняется масштабирование, которое выполняется путем регенерации pixmaps снова и снова с увеличенным разрешением. Этот процесс требует, чтобы весь документ был отображен в pixmaps, что, очевидно, требует времени и результатов в нежелательном лагере.
Логика хочет, чтобы мне отображались изображения только тех страниц, которые я вижу (это звучит как квантовая физика). У меня есть два варианта:
- создавать пустые страницы с QLabels и загружать изображение на них, когда они становятся видимыми в области прокрутки;
- создайте только одну страницу и добавьте или удалите прецедент или последующие страницы непосредственно перед ее отображением.
Я не уверен, что нахожусь на правильном пути или есть альтернатива.
Первый вариант кажется более выполнимым, поскольку видимость пустой страницы определяет, когда нужно загрузить pixmap (хотя я не знаю, как удалить эту карту pixmap, когда страница скрыта). Тем не менее я не уверен, что масштабирование будет быстрее таким образом, поскольку документ, скажем, 600 страниц, должен быть восстановлен, хотя и с пустыми страницами.
Второй вариант должен определенно улучшить масштабирование, так как при масштабировании необходимо будет восстановить от 1 до 4 страниц за раз. Однако в этом втором случае я не уверен, как инициировать построение страниц.
Что вы предложите?
Вариант второй менее эффективен, так как он требует перезагрузки одинаковых растровых изображений. Приведенный выше код должен быть улучшен при использовании потока вместо этого, чтобы избежать задержек при прокрутке. – Benjamin
PS: потоки в Qt4 не работают хорошо при выполнении графики. Поток создает искаженные изображения или приводит к сбою приложения. Возможно, я не справился с этим достаточно хорошо. В любом случае прокрутка задержки в основном является результатом большого DPI. Следовательно, если изображение повторно загружается в соответствии с уровнем масштабирования, тогда количество обрабатываемых данных на видимую область достаточно светлое, чтобы не допускать плавной прокрутки. – Benjamin