一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于Qt的分类绘图方法及装置与流程

2022-11-19 16:40:37 来源:中国专利 TAG:

一种基于qt的分类绘图方法及装置
技术领域
1.本发明涉及qt图像处理领域,尤其涉及一种基于qt的分类绘图方法及装置。


背景技术:

2.现有绘图设备,对于图片上已绘制的线条的分类处理还不够全面,通常这类线条有三种状态:穿过图片,起始点在图片上,终止点在图片上。但是现有设备采用的分类方法只能识别后两种情况,忽视了第一种,从而造成了绘图元素的缺失。
3.此外,现有绘图设备一般都对鼠标事件和触摸事件进行统一处理,这会使得在一定程度上影响使用性能,尤其是在4k显示屏上,如果由系统实现鼠标事件转化为触控事件再进行绘图,会产生较为严重的画线延迟现象。


技术实现要素:

4.本发明实施例提供一种基于qt的分类绘图方法及装置,能完整识别、处理各类线条数据并且采用事件分类处理消除事件转换造成的延迟。
5.为实现上述目的,本技术实施例的第一方面提供了一种基于qt的分类绘图方法,包括:对选中图片上每条线条按照预设分段距离进行分段得到多段线条;获取所述选中图片的位置信息和每段线条位置信息,对处于所述选中图片所属图元范围内的线段保持选中状态;从交互信息中获取外部事件信息,根据所述外部事件信息对外部事件进行触发分类;根据触发分类结果调用相应分类的函数对所述外部事件进行事件处理。
6.在第一方面的一种可能的实现方式中,所述根据所述外部事件信息对外部事件进行触发分类,具体包括:根据所述外部事件的触发条件,将所述外部事件划分归类为鼠标事件或者触摸事件。
7.在第一方面的一种可能的实现方式中,所述从交互信息中获取外部事件信息,根据所述外部事件信息对外部事件进行触发分类之后,还包括:读取所述外部事件信息的事件类型和释放事件;所述事件类型包括绘图事件和移动事件。
8.在第一方面的一种可能的实现方式中,所述根据触发分类结果调用相应分类的函数对所述外部事件进行事件处理,具体包括:若所述外部事件为移动事件,对所述选中图片所属图元范围内的图片元素和线段元素一同移动,当释放事件发生时停止本次事件处理。
9.在第一方面的一种可能的实现方式中,所述根据触发分类结果调用相应分类的函数对所述外部事件进行事件处理,具体包括:
若所述外部事件为绘图事件,创建画布图元和缓存图元并将所述缓存图元作为所述画布图元的子图元;根据所述外部事件中的绘图路径,使用画笔模块在所述缓存图元上将所述绘图路径转换成向量绘图;当释放事件发生时,使用画笔模块在所述画布图元上将所述向量绘图转换成矢量绘图。
10.本技术实施例的第二方面提供了一种基于qt的分类绘图装置,包括:分段模块,用于对选中图片上每条线条按照预设分段距离进行分段得到多段线条;选中模块,用于获取所述选中图片的位置信息和每段线条位置信息,对处于所述选中图片所属图元范围内的线段保持选中状态;分类模块,用于从交互信息中获取外部事件信息,根据所述外部事件信息对外部事件进行触发分类;处理模块,用于根据触发分类结果调用相应分类的函数对所述外部事件进行事件处理。
11.在第二方面的一种可能的实现方式中,所述分类模块具体用于:根据所述外部事件的触发条件,将所述外部事件划分归类为鼠标事件或者触摸事件。
12.在第二方面的一种可能的实现方式中,还包括读取模块;所述读取模块用于读取所述外部事件信息的事件类型和释放事件;所述事件类型包括绘图事件和移动事件。
13.在第二方面的一种可能的实现方式中,所述处理模块中的移动处理子单元用于:若所述外部事件为移动事件,对所述选中图片所属图元范围内的图片元素和线段元素一同移动,当释放事件发生时停止本次事件处理。
14.在第二方面的一种可能的实现方式中,所述处理模块中的绘图处理子单元用于:若所述外部事件为绘图事件,创建画布图元和缓存图元并将所述缓存图元作为所述画布图元的子图元;根据所述外部事件中的绘图路径,使用画笔模块在所述缓存图元上将所述绘图路径转换成向量绘图;当释放事件发生时,使用画笔模块在所述画布图元上将所述向量绘图转换成矢量绘图。
15.相比于现有技术,本发明实施例提供的一种基于qt的分类绘图方法及装置,对线条进行分段比较的方式,根据选中图片时的位置得到所属图元信息,当选中图片时,将图片所述图元范围与各个线段的位置进行比较,只对在图元范围内的有效线段进行处理,无关线段不选中执行后续指令。在响应外部的移动事件时,将满足共同移动的线段与图片相同的移动。在响应绘图事件时,在缓冲图元中使用画笔模块进行向量绘图,避免图元的重复刷新,且由于向量绘图只是用于画线中的显示,在最后在画布图元的矢量绘图之前都不会造成相交图元的刷新。
16.此外,通过对外部事件的合理分类,分类后能对触摸事件和鼠标事件分别处理,消除事件转换造成的延迟。
附图说明
17.图1是本发明一实施例提供的一种基于qt的分类绘图方法的流程示意图。
具体实施方式
18.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
19.请参见图1,本发明一实施例提供了一种基于qt的分类绘图方法,包括:s10、对选中图片上每条线条按照预设分段距离进行分段得到多段线条。
20.s11、获取所述选中图片的位置信息和每段线条位置信息,对处于所述选中图片所属图元范围内的线段保持选中状态。
21.s12、从交互信息中获取外部事件信息,根据所述外部事件信息对外部事件进行触发分类。
22.s13、根据触发分类结果调用相应分类的函数对所述外部事件进行事件处理。
23.本发明实施例采用了对线条进行分段比较的方式,当选中图片时,将图片位置与存储各个字线段位置进行比较,如以qlist类存储的一条完整线条信息中有线段信息满足包含在图片区域中,则说明该线段有点存在于图片中,满足共同移动的条件,则将该线段整体进行与图片相同的移动。
24.分段识别后将符合条件的线段加入处理对象,使得处理的线段对象扩大,涵盖了对穿过图片的线段,使得拖动图片时,能实现图层上的有效线条一起移动的效果。
25.特别地,在比较选中图片所属图元范围和各个线段位置时,可以调用通过contains函数,可以判断线段中的点是否存在在图片这个item的范围内,如果包含函数返回1,因此得以判断,或者:qgraphicsitem::collideswithpath(const qpainterpath &path, qt::itemselectionmode mode = qt::intersectsitemshape);然后设置比较模式为:qt::intersectsitemshape,当所属图元完全包括线条path时,返回1,则放入需要移动的数据中。
26.示例性地,s12具体包括:根据所述外部事件的触发条件,将所述外部事件划分归类为鼠标事件或者触摸事件。
27.对触摸事件和鼠标事件都进行单独的处理,在窗口界面对事件进行判断并分发到鼠标或触摸事件下进行对应处理。由于触摸事件和鼠标事件分别处理,能有效消除事件转换造成的延迟。
28.示例性地,s12之后还包括:读取所述外部事件信息的事件类型和释放事件;所述事件类型包括绘图事件和移动事件。
29.示例性地,s13具体包括:若所述外部事件为移动事件,对所述选中图片所属图元范围内的图片元素和线段
元素一同移动,当释放事件发生时停止本次事件处理。
30.示例性地,s13具体包括:若所述外部事件为绘图事件,创建画布图元和缓存图元并将所述缓存图元作为所述画布图元的子图元;根据所述外部事件中的绘图路径,使用画笔模块在所述缓存图元上将所述绘图路径转换成向量绘图;当释放事件发生时,使用画笔模块在所述画布图元上将所述向量绘图转换成矢量绘图。
31.qpainter类使用范围很广,常以qwidget作为绘图设备,qwidget的刷新机制是窗口式刷新,每次会渲染整个窗口达到刷新目的。渲染操作都是由主线程完成,因此频繁的刷新会严重影响性能。双缓冲思想的出现大大降低了刷新频率,引入了临时图层作为绘画过程中绘图设备,并消除重复画线。而qgraphicsscene刷新机制是以qgraphicsitem为单位进行刷新,因此在item(图元)中绘制长线条经过很多已存在item时,这会引起这些相交图元的刷新,那么就会直接影响实时画线的刷新,操作人员直观的感觉就是卡顿,线条折线严重。
32.本发明实施例使用了双缓冲机制,使得在绘制过程中避免了一直建立新的item,以减少接触到item时产生的大量刷新,该方案在绘制过程中,是使用向量绘图而没有使用建立item的矢量绘图,只在最后保存时,建立矢量绘图,因此大大降低了item的数量,减少绘制时的刷新造成的延迟,具体方法可参考如下:以canvas(画布图元)作为父item添加temp(缓存图元)作为子item——temp和canvas都有使用qpainter类进行图形绘制,不同点在于:在temp层中最后paint执行的对象是:在其他函数中使用qpainter将path绘制到的向量图,在canvas是将path作为对象画到父item中,结果是矢量图。在临时层上进行非矢量绘图,这时候绘制的速度会非常快,最后在释放事件中将完整的path绘制成矢量图,然后将临时层画线清空。
33.综上,本发明实施例采用双缓冲思想,在qgraphicsview中实现双缓冲与使用qpainter在qwidget中思想类似,但是缓冲区不能按常规使用中独立于最终绘制界面,因为item需要添加到scene后才能显示的原理使得temp层的显示必须依赖于item,且满足不为独立的item这个基础,因此需要将temp层作为子item添加到最终显示图层中来实现双缓冲,temp层不需要处理放缩,只需要使用qpainter在qimage类上绘制完成后使用drawimage函数将向量图形添加到父item进行显示,最终在松开鼠标或触控的瞬间,将该图形item以paint函数的方式绘制在该父item上。
34.需要说明的是,qgraphicsview是qt库中的页面类,用于显示qgraphicsscene中的内容,qpainter是画笔类,实现绘制,qwidget是窗口类,显示内容,通常为向量图,item是指在qgraphicsscene中添加的qgraphicsitem类,也就是每一个绘制的图元,temp是双缓冲机制中的缓冲层,也就是将没释放鼠标前的内容以向量图的形式绘制在缓冲层中。
35.相比于现有技术,本发明实施例提供的一种基于qt的分类绘图方法,对线条进行分段比较的方式,根据选中图片时的位置得到所属图元信息,当选中图片时,将图片所述图元范围与各个线段的位置进行比较,只对在图元范围内的有效线段进行处理,无关线段不选中执行后续指令。在响应外部的移动事件时,将满足共同移动的线段与图片相同的移动。
在响应绘图事件时,在缓冲图元中使用画笔模块进行向量绘图,避免图元的重复刷新,且由于向量绘图只是用于画线中的显示,在最后在画布图元的矢量绘图之前都不会造成相交图元的刷新。
36.此外,通过对外部事件的合理分类,分类后能对触摸事件和鼠标事件分别处理,消除事件转换造成的延迟。
37.本技术一实施例提供一种基于qt的分类绘图装置,包括分段模块、移除模块、分类模块和处理模块。
38.分段模块,用于对选中图片上每条线条按照预设分段距离进行分段得到多段线条。
39.选中模块,用于获取所述选中图片的位置信息和每段线条位置信息,对处于所述选中图片所属图元范围内的线段保持选中状态。
40.分类模块,用于从交互信息中获取外部事件信息,根据所述外部事件信息对外部事件进行触发分类。
41.处理模块,用于根据触发分类结果调用相应分类的函数对所述外部事件进行事件处理。
42.示例性地,所述分类模块具体用于:根据所述外部事件的触发条件,将所述外部事件划分归类为鼠标事件或者触摸事件。
43.示例性地,还包括读取模块;所述读取模块用于读取所述外部事件信息的事件类型和释放事件;所述事件类型包括绘图事件和移动事件。
44.示例性地,所述处理模块中的移动处理子单元用于:若所述外部事件为移动事件,对所述选中图片所属图元范围内的图片元素和线段元素一同移动,当释放事件发生时停止本次事件处理。
45.示例性地,所述处理模块中的绘图处理子单元用于:若所述外部事件为绘图事件,创建画布图元和缓存图元并将所述缓存图元作为所述画布图元的子图元;根据所述外部事件中的绘图路径,使用画笔模块在所述缓存图元上将所述绘图路径转换成向量绘图;当释放事件发生时,使用画笔模块在所述画布图元上将所述向量绘图转换成矢量绘图。
46.所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赞述。
47.相比于现有技术,本发明实施例提供的一种基于qt的分类绘图装置,对线条进行分段比较的方式,根据选中图片时的位置得到所属图元信息,当选中图片时,将图片所述图元范围与各个线段的位置进行比较,只对在图元范围内的有效线段进行处理,无关线段不选中执行后续指令。在响应外部的移动事件时,将满足共同移动的线段与图片相同的移动。在响应绘图事件时,在缓冲图元中使用画笔模块进行向量绘图,避免图元的重复刷新,且由于向量绘图只是用于画线中的显示,在最后在画布图元的矢量绘图之前都不会造成相交图元的刷新。
48.此外,通过对外部事件的合理分类,分类后能对触摸事件和鼠标事件分别处理,消除事件转换造成的延迟。
49.以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献