思路分析

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

化繁为简

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

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

总结

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

QT绘图实现橡皮擦效果相关推荐

  1. QT 绘图橡皮擦效果的实现

    QT绘图 橡皮擦效果的实现 前言 为了处理一些简单图片的后期处理,制作了一个简单的橡皮擦功能脚本.用来处理机器视觉中的图像处理. 开发工具 python版本: 3.6.5 相关模块: PyQt5 CV ...

  2. c++ qt获取电脑的内存_QT开发(十四)——QT绘图系统

    一.QT绘图原理 Qt4中的2D绘图系统称为Arthur绘图系统,可以使用相同的API在屏幕上和绘图设备上进行绘制,主要基于QPainter.QPainterDevice和 QPainterEngin ...

  3. 使用Qt绘图制作一个钟表

    使用Qt绘图制作一个钟表 实际效果如下: 一.钟表实现的大概思路 设置定时器,定时器每隔一秒调用repaint()函数,paintEvent()函数随即被调用,利用paintEvent()函数重绘钟表 ...

  4. Qt绘图:求圆和椭圆上任意角度点的坐标

    (2021-2-11 之前把笛卡尔坐标的 x 和 y 标注反了,已修正) 0.圆相关公式 在笛卡尔坐标系上,一个标准的圆是这样的: 已知圆心坐标 (x0,y0),半径 R,角度 a,则圆边上点(x', ...

  5. Qt 绘图坐标系转换

    Qt 绘图坐标系转换 先上一段代码,简单的画了个实心矩形 QPainter paint(this);paint.setBrush(Qt::yellow);paint.drawRect(0.0, 0.0 ...

  6. Cocos2dx 实现擦除即橡皮擦效果的实现

    Cocos2dx实现橡皮擦效果的实现 DionysosLai(906391500@qq.com)  2014/8/25 之前项目在做一个绘本游戏,要求实现擦除效果,具体效果可以参考绘本<我是一只 ...

  7. 2015.4.25-2015.5.1 字符串去重,比例圆设计,中奖机和canvas橡皮擦效果等

    1.字符串去重,html模板取值 2.javascript正则表达式之$1...$9 3.jquery插件 4.返回上一页并刷新 解决方法: <a href ="javascript: ...

  8. Qt Creator创建自定义效果和材质

    Qt Creator创建自定义效果和材质 创建自定义效果和材质 创建自定义效果 创建自定义材料 创建着色器文件 创建自定义效果和材质 " Qt Quick 3D效果"和" ...

  9. Qt Creator应用3D效果

    Qt Creator应用3D效果 应用3D效果 可用效果 应用3D效果 Qt Design Studio提供了一组Qt Quick 3D效果,这些效果继承了Qt Quick 3D Effects模块中 ...

  10. java做橡皮擦效果_HTML5 canvas橡皮擦擦拭效果

    这是一款HTML5 canvas橡皮擦擦拭效果.该效果通过canvas来制作遮罩层和擦拭用的橡皮擦,用户可以通过移动鼠标来移除遮罩层,效果非常炫酷. 因为发代码有时会排版混乱,所以先发图演示了.源码已 ...

最新文章

  1. C# 准备开始学习 并行程序开发
  2. 企业微信来了,老板的消息再也无法装作看不见了?​
  3. python程序的基本框架_Python PyQt学习随笔:PyQt主程序的基本框架
  4. 让 Ocelot 与 asp.net core “共存”
  5. 这绝对是有史以来最详细的web前端学习路线
  6. iphone如何信任软件_苹果企业开发者证书成漏洞 盗版商发布破解版iPhone应用
  7. Java 8 Stream.distinct() 列表去重示例
  8. chrome正受到自动软件的控制_河南科信混凝土搅拌站电脑全自动控制系统PLY1200A称重控制器上位机软件现场安装调试...
  9. 对话张悦然:当年新概念作文大赛获奖者 现在怎样了
  10. linux ping mtu值,ping 包长度及 MTU
  11. 【PDN仿真笔记4-电容布局仿真及结果分析】
  12. Cisco交换机下载IOS
  13. CorelDRAW零基础入门到精通
  14. 40163 php,【PHP】微信支付JsApi 40163错误
  15. 怎么设置微信公众号自动回复蓝色字体小程序链接
  16. 学游戏设计好就业吗?有“钱”途吗?
  17. 1--request模块
  18. 深圳内推 | 香港中文大学(深圳)路广利老师招聘NLP方向研究助理
  19. mediarecorder自制录相机花屏问题 微信录制视频花屏
  20. 【模版】背包问题汇总

热门文章

  1. Flash视频教程一把抓,自动获取Flash教程----谭石南
  2. ADW_Launcher
  3. react-native 轮播组件 looped-carousel使用介绍
  4. VINS-Mono代码阅读笔记(十三):posegraph中四自由度位姿优化
  5. 巧用python求解逻辑题,特简单!
  6. 昨日皇者——Symbian(塞班)
  7. ic 主动均衡_分享几种锂电池均衡电路的工作原理
  8. Web 通信 之 长连接、长轮询
  9. aws mysql rds_AWS 新建RDS实例 for MySQL
  10. 再读王垠的《编程的智慧》,有怎样的感想?