使用Poppler在Qt中免费闪烁PDF重新加载

时间:2019-04-21 13:29:19

标签: c++ qt5 repaint flicker poppler

我有一个QLabel,用于显示poppler渲染的图像。渲染和绘制在paintEvent()内部完成。例如,当用户与ui交互(如缩放或滚动)时,或者当pdf文件更改时,程序会在必要时更新内部数据,然后调用update来更新视图。 paintEvent()使用内部数据,要求poppler渲染正确的图像,然后进行绘制。

现在,poppler可能需要一段时间才能渲染图像。而且,在调用paintEvent() qt之前,总是擦除整个内容。结果,例如,当pdf文件更新时(这是我最感兴趣的情况),显示闪烁。

我的问题是:如何消除这种闪烁?如何告诉qt在内存中呈现页面之前不要擦除,或者至少不要擦除?

我在setAttribute(Qt::WA_OpaquePaintEvent)上尝试过setAutoFillBackground(false)QLabel,但是并不能解决问题。我还尝试将在update()setUpdatesEnabled(false)之间对setUpdatesEnabled(true)的呼叫周围。最后,我尝试将setUpdatesEnabled(false/true)放入paintEvent本身,但这导致了paintEvent的无限循环。

谢谢!

0 个答案:

没有答案