最后问题是粗体,所以请整体阅读。
我有一个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);
}
正如您所看到的那样,将内容渲染到像素图中会涉及“慢”功能。
问题是:当我调整窗口大小时,我可以看到片刻中还没有重绘的白色闪烁
我知道在重新绘制视口之前我无法避开白色区域,但我想立即用背景颜色绘制白色区域。
所以这就是问题:我可以在重像素图渲染之前立即显示背景颜色吗?
我似乎无法找到实现此目的的方法..似乎所有图形操作都被缓冲,然后立即一起咬合到屏幕上。我使用的是Windows 8.1 x64和Qt5。有没有办法立即绘制背景颜色,然后继续渲染的其余部分?
答案 0 :(得分:2)
最好的解决方案是将昂贵的渲染移出paintEvent(),可能会转移到另一个线程中。无论如何,你都想要缓存渲染的像素图。在真正需要时更新pixmap,然后调用update()来触发重绘。