Qt - 调整大小时避免白色背景(立即设置背景颜色)

Qt - avoid white background when resizing (set immediately a background color)

问题在最后以粗体显示,请通读。

我有一个 QAbstractScrollArea 小部件,我在 OnPaint() 事件中手动完全渲染它。

在它的构造函数中我设置了

setAttribute( Qt::WA_OpaquePaintEvent, true );
setAttribute( Qt::WA_NoSystemBackground, true );
setStyleSheet( "QWidget { background-color: rgb(0,0,77); }" );

绘画事件看起来像这样:

void MyArea::paintEvent (QPaintEvent *event) {
  QPainter view(viewport());
  view.fillRect(rect(), backgroundBrush);

  renderedPixmap = heavyAndSlowRenderingOnAPixmap();

  view.drawPixmap(viewRect, renderedPixmap, pixmapRect);
}

如您所见,有一个 "slow" 函数用于将内容渲染到像素图中。

问题是:当我调整 window 的大小时,我可以看到在尚未重绘的区域有片刻的白色闪烁

我知道在重新绘制视口之前我无法避开白色区域,但是我想立即用背景颜色绘制那个白色区域

所以问题来了:我可以在重像素图渲染之前立即显示背景色吗

我似乎找不到实现此目的的方法.. 似乎所有图形操作都经过缓冲,然后立即一起位块传输到屏幕上。我正在使用 Windows 8.1 x64 和 Qt5。有什么方法可以立即绘制背景颜色,然后继续进行其余的渲染?

最好的解决方案是将昂贵的渲染从 paintEvent() 中移出,可能转移到另一个线程中。无论如何,您都希望缓存渲染的像素图。在真正需要时更新该像素图,然后调用 update() 触发重绘。