QPainter下绘制图像的擦除

使用qt5.12.9的qml开发框架下,用QPainter绘图开发一个白板应用发现了一个问题:

图案绘制完成后,想要擦除一部分已经绘制的图像,想使用eraseRect函数将绘制的图案擦除。但是背景色为一张图片,绘制图像的层就是透明色,这样可以保证绘制的图像和背景不被冲突。但是你再调用eraseRect函数对已经绘制的图案做擦除操作,会覆盖之前的图案并留下白色的填充,无法用透明色覆盖填充。

 

解决:

// point.model true:绘制红色的路径  false:清除红色的路径
if(point.model){
            painter->setCompositionMode(QPainter::CompositionMode_SourceOver);
            painter->fillRect(point.x - (point.width/2), point.y - (point.width/2),
                              point.width, point.width, QColor(255,0,0,255));
        }
        else {
            painter->setCompositionMode(QPainter::CompositionMode_Clear);
            painter->eraseRect(point.x - (point.width/2), point.y -(point.width/2),
                              point.width, point.width);
        }

设置QPainter的绘图模式,默认的绘图模式是运用使用透明度分量来绘制图案的,在清除的时候直接设置绘图模式为清除,后面绘制的绘制操作直接清除像素信息实现,清除之前的绘画内容并不遮挡背景图像的显示。

 

  • 5
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值