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

时间:2015-05-23 16:50:08

标签: c++ windows qt paint qscrollarea

最后问题是粗体,所以请整体阅读。

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

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

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

并且paint事件如下所示:

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

  renderedPixmap = heavyAndSlowRenderingOnAPixmap();

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

正如您所看到的那样,将内容渲染到像素图中会涉及“慢”功能。

问题是:当我调整窗口大小时,我可以看到片刻中还没有重绘的白色闪烁

enter image description here

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

所以这就是问题:我可以在重像素图渲染之前立即显示背景颜色吗?

我似乎无法找到实现此目的的方法..似乎所有图形操作都被缓冲,然后立即一起咬合到屏幕上。我使用的是Windows 8.1 x64和Qt5。有没有办法立即绘制背景颜色,然后继续渲染的其余部分?

1 个答案:

答案 0 :(得分:2)

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