美文网首页
QPainter使用QImage做画布时花屏

QPainter使用QImage做画布时花屏

作者: e196efe3d7df | 来源:发表于2022-06-15 17:23 被阅读0次

记录一个工作中遇到的问题,使用QImage作为画布,进行绘制,格式为QImage::Format_RGBA8888,需要透明通道,代码如下:

std::shared_ptr<QImage> canvas = std::make_shared<QImage>(drawMapConfig.canvasWidth, drawMapConfig.canvasHeight, QImage::Format_RGBA8888);
QPainter painter(canvas.get());
painter.setRenderHints(QPainter::SmoothPixmapTransform | QPainter::Antialiasing);
...
// 设置颜色
QColor colorBg(120, 120, 120, 120);
painter.setPen(colorBg);
painter.setBrush(QBrush(colorBg, Qt::SolidPattern));
// 进行绘制
...

在调试时,发现缩放窗口,会导致绘制花屏,但是把透明通道关闭,设置格式为QImage::Format_RGB888就不会花屏。
经过不断测试,最终解决,只需在初始化时,把Image填充为透明色就行了。代码如下:

std::shared_ptr<QImage> canvas = std::make_shared<QImage>(drawMapConfig.canvasWidth, drawMapConfig.canvasHeight, QImage::Format_RGBA8888);
// 填充为透明色,即可解决
canvas->fill(Qt::transparent);
QPainter painter(canvas.get());
painter.setRenderHints(QPainter::SmoothPixmapTransform | QPainter::Antialiasing);

相关文章

网友评论

      本文标题:QPainter使用QImage做画布时花屏

      本文链接:https://www.haomeiwen.com/subject/mivxvrtx.html