QT绘图实现橡皮擦效果

思路分析

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

化繁为简

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

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

总结

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

来源:孤骑清寒

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年7月26日
下一篇 2020年7月26日

相关推荐