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

这篇具有很好参考价值的文章主要介绍了Qt实现桌面画线、标记,流畅绘制,支持鼠标和多点触控绘制。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

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


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


首先来看实际效果:
qt用户端画线,Qt,Qt桌面画线,Qt曲线绘制,桌面标记,多点画线录制一个局部动画效果:
qt用户端画线,Qt,Qt桌面画线,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);//填充轮廓

本文Demo下载
快捷键:数字 1表示画线 2表示擦除 3表示清空,导航键 上下分别表示放大和缩小,Esc退出软件文章来源地址https://www.toymoban.com/news/detail-607904.html


到了这里,关于Qt实现桌面画线、标记,流畅绘制,支持鼠标和多点触控绘制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包