Перезарядка PDF без мерцания в Qt с Poppler - PullRequest
0 голосов
/ 21 апреля 2019

У меня есть QLabel, используемый для отображения изображений, отображаемых poppler. Рендеринг и рисование выполняется внутри paintEvent(). Например, когда пользователь взаимодействует с пользовательским интерфейсом (например, масштабирование или прокрутка) или когда файл PDF изменяется, программа обновляет внутренние данные, если это необходимо, и затем вызывает update, чтобы обновить представление. Используя внутренние данные, paintEvent() просит poppler визуализировать правильное изображение, а затем рисует.

Теперь Попплеру может потребоваться некоторое время для рендеринга изображения. Более того, перед вызовом paintEvent() qt всегда стирайте все это. В результате, например, при обновлении файла PDF (что мне особенно интересно), дисплей мерцает.

Мой вопрос: как мне устранить это мерцание? Как я могу сказать qt не стирать или, по крайней мере, не стирать, пока страница не будет отображена в памяти?

Я пытался setAttribute(Qt::WA_OpaquePaintEvent) и setAutoFillBackground(false) на своем QLabel, но это не решило проблему. Я также попытался окружить свои звонки на update() между setUpdatesEnabled(false) и setUpdatesEnabled(true). Наконец, я попытался поместить setUpdatesEnabled(false/true) внутри самого paintEvent, но это привело к бесконечному циклу paintEvent.

Спасибо!

...