这个问题在结尾处以加粗字体标出,请整体阅读。
我有一个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);
}
正如您所看到的,这里涉及到一个“缓慢”的函数来将东西呈现为 pixmap。
问题是:当我调整窗口大小时,我可以看到尚未重新绘制的区域中会出现白色闪烁。
我知道在视口重新绘制之前无法避免白色区域,但我想立即用背景颜色绘制该白色区域。
因此,问题来了:我能否在重型 pixmap 渲染之前立即显示背景颜色?
我似乎找不到实现这一点的方法...似乎所有的图形操作都被缓冲,然后立即位块传输到屏幕上。我正在使用 Windows 8.1 x64 和 Qt5。有没有办法立即绘制背景颜色,然后继续进行其他渲染?