QT绘图实现橡皮擦效果

思路分析

基本上所有绘图软件都有橡皮擦功能。而我最近在做的和其他的软件又不太相同,类似于实际生活中的橡皮擦,即擦掉笔画中的部分内容而不动背景图。
网上的实现思路也有很多。但没有找到合适的。我也想到过使用诸如路径填充、裁剪绘画图层等方法。但总觉得不够完美。

化繁为简

经过多次尝试最终决定使用一下思路进行。

  1. 当背景为纯色时(教学黑板模式)
    使橡皮擦画笔颜色和背景颜色相同进行绘制,虽然逻辑上和橡皮擦的擦除不太符合。但实际实现的效果是相同的。
  2. 当背景为图片时(适用课本教学)
    思路同上,只不过使用了QPen的SetBrush功能。使画笔使用整个背景图片来填充绘制结果。最终实现效果就如同擦去了画上去的笔迹。而实际上是使用背景图覆盖了笔迹。

总结

有时在程序设计的时候不要直接模拟现实逻辑,稍微变通一下有时候减法可以做成加法来实现。特别是在界面展示这方面,就像变魔术一样,只要看起来一样使用什么方式实现都行。
另外一些例子:比如我们常见的无系统框架的窗口阴影实现,和我以前谈到过的保持窗口的宽高比的实现。窗口阴影实际上是一个独立的窗口,只不过和主窗口实现了动作上的同步,保持宽高比实际上是禁用系统对应的功能通过识别对应的鼠标消息来实现相同的功能。总的来说,只要操作方式相同实现的最总效果相同,我们的目的就达到了。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值