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

您所在的位置:网站首页 一点透视作图 Qt实现桌面画线、标记,流畅绘制,支持鼠标和多点触控绘制原创

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

2023-03-23 23:43| 来源: 网络整理| 查看: 265

前言

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

今天分享如何通过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);//填充轮廓



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3