gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 09:24:06 24 4
gpt4 key购买 nike

问题在末尾以粗体显示,因此请通读整篇文章。

我有一个 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);
}

如您所见,有一个“慢速”函数涉及将内容渲染到像素图中。

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

enter image description here

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

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

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

最佳答案

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

关于c++ - Qt - 调整大小时避免白色背景(立即设置背景色),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30415236/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com