记录一个工作中遇到的问题,使用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);
网友评论