使用qt5.12.9的qml开发框架下,用QPainter绘图开发一个白板应用发现了一个问题:
图案绘制完成后,想要擦除一部分已经绘制的图像,想使用eraseRect函数将绘制的图案擦除。但是背景色为一张图片,绘制图像的层就是透明色,这样可以保证绘制的图像和背景不被冲突。但是你再调用eraseRect函数对已经绘制的图案做擦除操作,会覆盖之前的图案并留下白色的填充,无法用透明色覆盖填充。
解决:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12// 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的绘图模式,默认的绘图模式是运用使用透明度分量来绘制图案的,在清除的时候直接设置绘图模式为清除,后面绘制的绘制操作直接清除像素信息实现,清除之前的绘画内容并不遮挡背景图像的显示。
最后
以上就是殷勤大象最近收集整理的关于QPainter下绘制图像的擦除的全部内容,更多相关QPainter下绘制图像内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复