我有一个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
的无限循环。
谢谢!