前言

经常会在网上直播讲课或者点评中看到可以在课件上或者桌面上进行画线标记划重点,其实实现并不难,原理就是在桌面上盖一个透明图层,然后根据鼠标点绘制曲线。

今天分享如何通过Qt的QGraphics体系来实现这个功能,以前的文章已经介绍过使用Qt进行曲线绘制及相关原理,所以这里就不再重复了,直接讲关键部分代码。

首先来看实际效果:

录制一个局部动画效果:

正文

以上效果是通过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);//填充轮廓

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. Python - 输出格式 (学习小结)
  2. webpack打包js文件
  3. JAVA复习5(集合——LinkedList)
  4. silverlight: [HtmlPage_NotEnabled] 调试资料字符串不可用的解决
  5. 如何关掉Microsoft Office Click-to-Run服务
  6. 线性判别结合源码分析LDA原理
  7. 终于来了!全球首发联发科天玑1000+手机入网
  8. ES 新增字符串方法
  9. Golang操作数据库
  10. vue - webpack.dev.conf.js for FriendlyErrorsPlugin
  11. PhotoShop基础——如何抠图
  12. 快应用中实现自定义抽屉组件
  13. ZohoCRM客户管理系统应用的案例分享
  14. PMI-PBA 商业分析师 认证简介
  15. linux下输入ls显示时间格式,【Linux基础】linux下修改ls显示的时间格式
  16. 【Markdown 1】什么是Markdown?怎么用? - Markdown语法个人简述总结(图文)(常用)
  17. 三极管频率大,放大倍数小原因
  18. php手游服务端开发教程,【手游服务端】梦想海贼王 卡牌系列一键端服务端游戏源码+教程...
  19. Exception encountered during context initialization(报错详解)
  20. 仿六间房 新浪秀场网页视频聊天室 网页视频直播系统

热门文章

  1. 模型驱动开发的幻象与现实
  2. Django之模型层2
  3. 软件测试之Charles
  4. 关于android开发工具无法识别android手机的情况总结
  5. C/C++中如何将输出的数字精确到小数点后几位呢?
  6. FPGA读写Flash模块 Verilog程序设计
  7. 可爱的EGO所有中文游戏下载
  8. 华为鸿蒙手机什么时候上市5g,5g手机什么时候上市 华为5g手机何时上市?
  9. Android应用《撕开美女衣服》的实现过程及源代码
  10. allegro多版本安装_Revit2020怎么安装?revit2020版本安装教程,图文教程