前言

经常会在网上直播讲课或者点评中看到可以在课件上或者桌面上进行画线标记划重点,其实实现并不难,原理就是在桌面上盖一个透明图层,然后根据鼠标点绘制曲线。
今天分享如何通过Qt的QGraphics体系来实现这个功能,以前的文章已经介绍过使用Qt进行曲线绘制及相关原理,所以这里就不再重复了,直接讲关键部分代码。


本文Demo下载
快捷键说明:数字 1表示画线 2表示擦除 3表示清空,导航键 上下分别表示放大和缩小,Esc退出软件


首先来看实际效果:
录制一个局部动画效果:

正文

以上效果是通过QGraphics来实现,绘制非矢量图形(在图片上画线)。
来看下几个关键点

透明

由于要实现透视到桌面效果,所以需要投图层设置为透明,所以首先得把QGraphicView设置为透明:

    view->setAttribute(Qt::WA_TranslucentBackground);view->setStyleSheet("background-color:transparent;border:0px");

然后由于使用的是非矢量绘图方式,所以绘制的图片也要设置成透明才行:

m_pRealCanvas = new QImage(m_size.toSize(),QImage::Format_ARGB32_Premultiplied);
m_pRealCanvas->fill(QColor(255,255,255,1));

绘制

上面说了,为了能够更高效的绘制和擦除曲线,使用了非矢量的方式进行绘图,也就是在一张固定的图片上进行绘制。
关于矢量和非矢量方式绘图的区别以及绘制相关注意事项,可以参考之前的文章。
文章在这里

擦除

其实擦除功能和绘制功能一样, 由于使用的是非矢量画线,所以擦除只需要绘制一个和底色相同的粗的曲线即可实现擦除效果。但是要注意设置painter的setCompositionMode属性,设置为QPainter::CompositionMode_Source。

    m_pRealPainter->setRenderHint(QPainter::Antialiasing, true);m_pRealPainter->setCompositionMode(QPainter::CompositionMode_Source);m_pRealPainter->setPen(QPen(m_bgColor,width, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));m_pRealPainter->fillPath(path,m_bgColor);//填充轮廓

本文Demo下载
快捷键:数字 1表示画线 2表示擦除 3表示清空,导航键 上下分别表示放大和缩小,Esc退出软件


Qt实现桌面画线、标记,流畅绘制,支持鼠标和多点触控绘制相关推荐

  1. Qt实现桌面画线、标记,流畅绘制,支持鼠标和多点触控绘制原创

    前言 经常会在网上直播讲课或者点评中看到可以在课件上或者桌面上进行画线标记划重点,其实实现并不难,原理就是在桌面上盖一个透明图层,然后根据鼠标点绘制曲线. 今天分享如何通过Qt的QGraphics体系 ...

  2. 嵌入式Linux应用程序开发-(10)i.MX6UL基于嵌入式QT实现电容屏多点触控

    i.MX6UL基于嵌入式QT实现电容屏多点触控 基于i.MX6UL平台,使用嵌入式QT实现电容屏的多点触控,前提是开发板的电容触摸屏驱动已经支持多点触控,并且驱动程序能通过事件方式向应用程序上报触控数 ...

  3. 画线标记html,markline.js——轻量级canvas绘制标记线的库

    这段时间要做的是一个数据可视化的小型项目.其中最基本要求是实现两点之间的迁徙关系(比如同一个用户不同时间上网的地点)用一条有向线段(markline)联系在一起.很自然的我一开始想的就是采用百度的ec ...

  4. Qt Scene graph画线

    前言 想要实现在QML中画线,有几种方式: 第一种,用在QML中用Canvas来实现画线功能,经过实践,效率比较低,折线非常严重,特别是在Android手机上运行. 第二种,通过QPainter来绘制 ...

  5. Qt 实现钢笔画线效果详细原理

    前言 上一篇文章:Qt 实现画线笔锋效果详细原理,根据这篇介绍的实现笔锋效果的原理,我们很容易实现另外一种笔效:钢笔. 所谓的钢笔笔效,就是真实还原钢笔书写出来的线条效果,其特征就是:根据笔的绘制速度 ...

  6. MATLAB plot函数,画线标记数据点(实线、虚线、改变颜色)

    数据点画圈: 实线: plot(time1,'o-'); 结果: 虚线: plot(time1,'--o'); 结果: 画线换颜色 plot(time1,'o--r'); 结果:

  7. 物理画线“救救小鸡”,支持自建关卡!技术教程分享

    引言:Cocos 微店 12.12 ~ 12.14 双12特惠来袭,5.x 折优惠 + 店铺公开优惠券(每天100张).如果你错过了双11,请不要再错过双12啦! 今天给大家推荐的是一款抖音爆款&qu ...

  8. openGL实现中点画线算法、DDA画线算法,Bresenham画线算法,并进行鼠标键盘的交互

    首先设置变量用于进行鼠标交互和键盘交互: int m = 0; GLdouble m1 =0, m2 = 0; 1.实验入口主函数: //主函数 int main(int argc, char** a ...

  9. 向日葵iOS主控端7.2发布:iPhone远程桌面 鼠标指针、触控任性操作

    远程控制软件的使用一般都需要在控制的两端设备上分别安装软件程序.向日葵支持Windows/Linux/Mac/iOS/Android等主流系统,安装向日葵iOS主控端版本7.2后,可使iPhone.i ...

最新文章

  1. 机器学习(4.文本数据的特征抽取(第二种TfidfVectorizer(TF-IDF)))
  2. 转存储过程实现分页1
  3. java编译找不到符号_关于久违的Javac,编译出现“找不到符号”
  4. 前端学习(751):Javascript作用域
  5. 百度SEO 统计平台推送工具 1.8
  6. Generalised Dice Overlap as a Deep Learning Loss Function for Highly Unbalanced Segmentations
  7. 4线电子围栏安装示意图_红外对射、电子围栏、振动光纤、智能警戒4种常用的周界安防系统...
  8. Masm5.0、6.15 - 汇编语言编译器
  9. 计算机网络教程网线制作,网线水晶头制作过程详解(视频+图文教程)
  10. macOS Big Sur 11.2.2 (20D80) 虚拟机 ISO 镜像
  11. 黄土高原主要是什么树木
  12. 模拟调制—DSB信号及生物电信号特性测量分析实验报告
  13. 通过微信公众号跳转H5页面领取现金红包
  14. bss段,data段、text段、堆heap和栈stack
  15. 设计分享 | STM32F103RCT6定时器定时中断原理
  16. 有关血型的限制级秘密 (A型)
  17. 深圳Java学习培训:SQL语言之索引-千锋
  18. 问题分享:Word中图片显示不全的解决方法
  19. 嵌入式Linux系统开发笔记(十五)
  20. postfix无法发送邮件问题

热门文章

  1. sql里别再用where 1=1了,早晚会出事的!
  2. uni 微信小程序生成聚合点,点击导航到当前聚合点
  3. ORA-08002: sequence SEQ_TBL_ONLINE.CURRVAL is not yet defined in this session
  4. 用UDP网络编程做简易聊天工具
  5. WOW魔兽世界全种族代号表
  6. 深度揭秘腾讯云低功耗广域物联网LPWAN 技术及应用
  7. 企业为何选择企业云盘而不是个人云盘呢?
  8. (转)各种聚类算法的系统介绍和比较
  9. 安装Gitblit 服务器版本
  10. 云计算机的形状,怎样用ps做任意形状的云彩