记录一个工作中遇到的问题,使用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);
在使用QImage进行绘制时,以Format_RGBA8888格式创建带透明通道的图像,在缩放窗口时出现花屏现象。关闭透明通道或初始化时填充为Qt::transparent可以解决问题。代码示例中,通过在创建QImage后填充为透明色,成功避免了花屏问题。

2981

被折叠的 条评论
为什么被折叠?



