范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

Qt鼠标触屏绘制平滑曲线,支持矢量非矢量方式

  前言
  Qt通过鼠标或者触屏,实时绘制平滑曲线,通常有两种方式实现:矢量绘图和非矢量绘图,这两种画线方式从实现上有些不同,其原理也不太一样,稍后会做详细介绍。而鼠标或者触屏画线也不大一样,通常如果只实现鼠标画线的话,那么只需要重新实现鼠标事件即可(mousePressEvent、mouseMoveEvent、mouseReleaseEvent),而要在触控屏上画线,如果需要支持多点画线的话,就必须处理QTouchEvent事件才行,但是如果触屏上只支持单点画线,那也可以直接实现鼠标事件,因为第一个触点的事件会同时进入到QTouchEvent和Mouse事件中。QTouchEvent中可以区分出多点时每个触点的id,通过id进行区分每个点的数据。
  通常情况下,为了提升绘图效率,要实现这种绘图的功能,都是用QGraphics体系来完成,因为QGraphics刷新机制和QWidget不太一样,它可以做区域刷新,这样能保证效率更高,特别是针对一些分辨率较高的设备,就很明显了。具体这两个体系间的区别就不在这里进行描述。
  所以,接下来为了演示矢量和非矢量画图方式,我们在QGraphics体系中实现一个简单的画板程序。注重画线效率,保证线条平滑无折线,无锯齿,支持多点画线。效果图
  先来看看非矢量绘图的效果:
  再看矢量绘图效果:
  二者区别
  通过上面的两个图对比,相信大家已经看出了一些区别。我们再详细介绍一下这两者的区别。
  非矢量绘图
  优点:速度快。非矢量绘图原理是直接在一张图片上进行绘制,其渲染速度很快,即便是画了很多线条, 也不会有卡顿的效果,擦除时同样很快。
  缺点:缩放失真。由于非矢量绘图是在图片上渲染,当缩放图片时,会导致线条模糊不清晰,如果只是小范围的缩放还能接受,无限缩放的话就会很明显了。二者区别
  通过上面的两个图对比,相信大家已经看出了一些区别。我们再详细介绍一下这两者的区别。
  非矢量绘图
  优点:速度快。非矢量绘图原理是直接在一张图片上进行绘制,其渲染速度很快,即便是画了很多线条, 也不会有卡顿的效果,擦除时同样很快。
  缺点:缩放失真。由于非矢量绘图是在图片上渲染,当缩放图片时,会导致线条模糊不清晰,如果只是小范围的缩放还能接受,无限缩放的话就会很明显了。
  矢量绘图
  优点:无限缩放,不失真。矢量绘图是将点数据绘制生成一个单独的对象,当进行缩放的时候,会重新进行渲染,所以矢量绘图的方式不会导致图像失真。
  缺点:线条多时会卡顿,擦除尤其明显。由于矢量绘图是生成一个单独的对象,所以当画线多的情况下,会触发所有有交集的对象进行刷新,擦除的时候,会去计算线条之间的交集并做删减,这个过程会很慢,并且会将整个对象item进行刷新,所以卡顿明显(上述效果图就可以看出来了)。
  通过以上两者的优缺点对比,根据实际需要进行选择实际的画线模式。
  解决实时绘图折线问题
  折线效果:
  可以看到上述画线有很明显的折线,线条不平滑。
  通常绘制这种线条,第一反应想到的是讲两个点直接连接起来行成一条直线,但是,由于两点之间距离比较大,特别是触控屏,点与点之间并不是很密集,因为上层应用在主线程渲染的时候,系统会自动丢弃一些数据点,即便是底层上报的点很多,上层应用接收到的点也会减少,所以不能直接用连接两点的方式来实现。
  那么,该怎么解决呢?
  绘制贝塞尔曲线。
  在move的过程中实时生成贝塞尔曲线path,这样就能保证线条无折线。QPainterPath支持贝塞尔曲线绘制,参加以下函数:void QPainterPath::quadTo(const QPointF &c, const QPointF &endPoint) Adds a quadratic Bezier curve between the current position and the given endPoint with the control point specified by c. After the curve is added, the current point is updated to be at the end point of the curve.
  非矢量绘图实现方式
  所谓的非矢量绘图,就是在一张图片上进行绘制,然后将图片渲染到QGraphicsItem的背景上面,前面我们已经提到,该方式渲染速度非常快,无论画多少线条都不会影响速度,而擦除功能只需要按照同样的方式绘制背景色即可。
  但是该方式在缩放过后图片会有些模糊,如果只是小范围的缩放还好,无限缩放就需要用到矢量绘图的方式了。
  矢量绘图实现方式
  相比之下,矢量绘图就会稍微麻烦一点,所谓矢量绘图,就是将path曲线直接生成一个独立的对象,将该对象添加到scene中,这种模式下会有一个缺陷,就是当画线较多的情况下,刷新会比较慢,因为会导致整条曲线(只要有交集)刷新,从而导致卡顿的效果,并且在擦除时,需要实时计算擦除的path与实际线条path的交集,然后进行计算,减去擦除的path,这个过程是最耗时的,并且也会引发整个item刷新。前面写过文章介绍QGraphics体系的刷新机制
  双缓冲绘图
  上面介绍到,通过非矢量绘图的方式,速度会非常快,那么双缓冲绘图就是要结合非矢量来进行,其原理就是:在press事件中生成一条path,接着move中动态增加这条path,然后在临时层上进行非矢量绘图,这时候绘制的速度会非常快,最后在release事件中将完整的path绘制成矢量图,然后将临时层画线清空。基本原理就是这样。
  双缓冲绘图方式,在绘制过程中是通过非矢量的方式在临时层进行,release后生成完整的矢量path,这种方式速度会非常快,并且直接绘制完整的一条path不会有锯齿。所以这是最佳选择。
  【领QT开发教程 学习资料,点击下方链接莬费领取↓↓ ,先码住不迷路~】
  点击这里:「链接」

老房子那是个怎样的地方啊,眼前的破砖乱瓦已无法再和脑海里的印象重叠,我穿过及膝的草,向前去,那扇久闭的大门落了锁,不让再推开了,它凶神恶煞地堵在我面前,仿佛忘了,我曾经是它的孩子。我强忍闷声发财,成为富人!(第7集)头条创作挑战赛今天刷到了一个电影隐入尘烟,讲述的是一对穷人,老实人,被生活抛弃的人相濡以沫的故事。没看的可以去看看,因为看完真的好悲伤,好难过。在评论区看到了一句很真实的话钱永远流初春湿气重,四款祛湿汤,祛湿利水,扬霉吐气冬去春来,走过干燥的冬季,迎来了潮湿的初春。春天是祛湿的最佳时节,湿气重的人,快把祛湿提上日程!介绍四款祛湿汤,祛湿利水,扬霉吐气。术芪薏米汤准备材料山药干25g,芡实18g,薏米韭菜别再炒着吃了,学会这种新做法,开胃又解馋,真是太香了妈妈看田里韭菜冒出来了,我家都连续吃了半个月的韭菜馅的饺子了,吃的我看见饺子都害怕啦!不想像我一样吃韭菜饺子吃到吐,就赶紧学会这道凉拌韭菜吧!清爽好吃,韭菜味特别浓郁。准备食材韭菜崇明西滩的芦苇崇明西滩看芦苇,即使枯黄也美丽,一草一木皆有情。一hr冬月初三,崇明西滩看芦苇。这里是芦苇的世界芦苇的家。从江阴的鹅鼻嘴到接近东海里的鸡骨礁,构成了气势磅礴的长江入海口。西滩,是长促消费,今年有哪些看点近日,甘肃省兰州市七里河区老街,游人如织。人们赏舞狮看表演猜灯谜品美食,处处洋溢着热腾腾的烟火气。兰州老街通过多场景布局多业态融合沉浸式消费等途径,每天吸纳近10万游客,成为城市商超然楼上景超燃!以上三张照片拍与2022年4月28日最近泉城济南超然楼亮灯瞬间的视频火遍了全网。从而使得每天傍晚都有很多游客自发聚集在大明湖畔争相目睹见证超然楼亮灯时的流光溢彩!此照片拍与2022万物复苏春来到花开中国遍地香央视网消息立春之后,万物复苏的春天来到。下面让我们向暖而行,感受春的气息,领略花开中国。眼下,海南各地的三角梅,花开正艳,一团团一簇簇竞相绽放。三角梅是海南省的省花,在海南各地都很夜尿增多或与疾病有关,那每晚排尿两次属于夜尿多?一文告知答案对于健康人群来说,每晚排尿次数一般为02次,排尿量为300400毫升,总尿量约为每天白天排尿总量的13或者是14。如果排尿次数增多,或者是夜晚尿液量超过白天尿液量的话,则被称为夜尿看!这是眉山春的模样是冬春之交的时节我们送走了岁暮天寒迎来了春意盎然游走于城市之间入眼皆是生机勃勃的景象五彩斑斓的花儿正奋力生长似要在这片动人画卷中闯出一番新天地阳光明媚,万物生长眉州大地,风景如画看谁在惦记女人的子宫?自古以来,女人生孩子是天经地义的事,但是随着社会的发展,很多女性提起生孩子,往往就是一句话我为什么要给你生孩子?我为什么要生孩子?请不要责怪现在的女性,让我们看看下边一组数据,是谁
家常酱香茄子,开胃下饭!食材明细长紫茄子大蒜线椒小葱盐糖黄豆酱豆瓣酱。做法步骤1。长紫茄子切成一指宽左右的长条,加盐翻拌均匀,腌制10分钟。2。蒜切成蒜末,辣椒切圈,小葱切段备用。3。碗中放入一勺豆瓣酱。罗定将会迎来第一条高铁,结束不通高铁的历史旅行,不光是看风景,更是看世间人生百态,高铁改变旅游市场群体,其舒适性便捷性和时间可掌控性。我们谈谈罗定将会迎来第一条高铁,结束不通高铁的历史。昆深高铁线路罗定位于广东省西部,西江四川省攀枝花市东区护航舒心康养查处违法案例中国质量新闻网讯(陈丽红)冬季正是阳光花城攀枝花的阳光旅游旺季,为给广大旅客群众营造一个放心舒心的康养消费环境,自2022年11月1日起至2023年2月8日,四川省攀枝花市东区市场今年春节被挤爆的地方,是西双版纳?仙人脚印巴达山普洱茶?以往每年春节,最热门的旅游目的地都很好猜测,不是海南三亚,就是海南三亚。但是2023年春节,最火的旅游城市,西双版纳是其中之一!很多人都反馈说挤爆了,感觉拥挤程度堪比三亚。甚至抖音趣事一箩筐有意义的端午节(瑞虎,不靠谱!)某年正值端午,友人从京来访。期间一同事刚好在学车,借了一辆奇瑞瑞虎,吃过早饭友人开着车,三人同去梁子湖共度端午。一来友人极少来汉,到梁子湖看看风景品尝湖鲜二来那里地势开阔,同事也好青岛那么美,我想去看看!三年久违,入境游山东首团抵青小时候我就听说青岛的海鲜很好,风景很美,今天终于来了!青岛人太热情了,我太感动了!香港游客谭艳卿笑容格外灿烂。2月12日下午,青岛市文化和旅游局在国信金融中心酒店举行红瓦绿树碧海蓝家乡美我的家乡是位于山东半岛东南部的五莲县,又属于革命老区沂蒙山区,东临青岛市西海岸新区,南接日照市东港区,西连日照市莒县,北靠潍坊市诸城。五莲县,是山东省日照市下辖县,1947年5月最兼职导游带团在景区摔伤,责任谁担?案情回顾2019年10月份,因业务需要,杭州某旅行社临时聘用潘某为其带团担任导游。在带团过程中,潘某不慎摔倒受伤。后被送至医院急诊科救治。经医生检查,诊断为左三踝骨折,需要手术治疗韩国全州(Jeonju)全州是全罗北道最大的城市,每个角落都沉浸在古朴而传统的美景中。当您到达按照传统韩屋建筑风格建造的全州收费站的那一刻,您就会意识到全州确实是具有代表性的韩国城市。全州是建立朝鲜的太祖重庆轻轨从楼中穿过,他们就不嫌吵闹?来听听这栋楼里的人怎么说随着时代的发展,人们的生活水平也越来越高,出去旅游的人也越来越多,在旅游的过程中,人们总是会被一些稀奇古怪的风景所吸引,比如重庆的李子坝就是其中之一,它的独到之处吸引了无数的游客,春天去马来西亚看海吧!沙巴旅行百科全书请收好时隔三年,停滞的出国游计划终于可以重新拾起。旅途的第一站,不如就从四季如夏的马来西亚开始?签证普通签证发给来马旅游从事商务考察活动和探亲访友的外国公民。有效期3个月,一次入境可停留