QPainter下绘制图像的擦除

本文介绍如何在Qt5.12.9的qml开发框架下使用QPainter实现白板应用的绘图及擦除功能。特别讨论了在保持背景图片不变的情况下,如何有效清除已绘制的图案而不会留下白色痕迹的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值