一种使用Qt进行二维图层的绘制及事件处理方法与流程

文档序号:12595591阅读:4567来源:国知局
一种使用Qt进行二维图层的绘制及事件处理方法与流程

本发明涉及计算机图层处理领域,特别是涉及一种使用Qt进行二维图层的绘制及事件处理方法。



背景技术:

Qt提供了两种绘图机制,一种是GraphicsView机制,另外一种是基于QWidget窗口部件自定义绘制图形。前者已实现了图层选择、事件处理、状态管理等功能,但后者并未提供,此方法主要针对后者在图形绘制上进行功能的强化。

QWidget窗口是一种矩形、透明的窗口图层,可对其编程实现图形绘制、事件处理等功能。但在实际的应用中会出现如下几个问题(如图1所示):

一、图层绘制:在使用QWidget进行图层绘制时,其本身只提供了绘制的通用函数,但未指定绘制的过程,这样限制了用户绘制图形的尺寸,位置。

二、图层选择:在蓝色矩形图层中,只有椭圆对用户可见。因QWidget会处理其区域内的所有事件,因此当点击空白区域时,蓝色图层依然会被选中,这就造成了选择上的错误。

三、事件传播:屏幕上新建蓝色矩形图层并绘制椭圆,其与绿色的图层产生区域重合。因蓝色矩形是透明,用户本想点击重叠区域选择绿色图层进行操作,但因遮挡原因,蓝色矩形会拦截传播向绿色矩形的事件,造成绿色图层无法选中。



技术实现要素:

本发明主要解决的技术问题是提供一种使用Qt进行二维图层的绘制及事件处理方法,能够有效地解决Qt二维图层绘制过程繁琐、事件传播不穿透的问题。

为解决上述技术问题,本发明采用的一个技术方案是:提供一种使用Qt进行二维图层的绘制及事件处理方法,主要包括如下步骤:

一、图层绘制:对绘制的图层进行分类,对每种类型绘制时所需要提供的条件进行整理,绘制完成之后,图层自动进行尺寸的调整,将尺寸调整到可以最小包围绘制图形,然后将此图形加入到图层绘制队列,进行托管管理;

二、图层选择:在图层范围内点击任意部分激活图层;事件产生后,由队列管理模块将事件按照入队顺序反方向交由图层,图层在接收到事件后,自动将事件产生的位置转换成自身坐标值;图层依照自身的类型,加入旋转角度,判断绘制区域是否包含此点;在处理后,如果事件点位置在绘制图层区域之内,图层会进行选中,方便下步操作,否则事件忽略处理;

三、事件传播:管理者从事件队列里取出一事件,查看此事件源,依照图层唯一标识在队列中定位此图层,之后会依次地将事件交由在此图层之前创建的图层进行处理,并对此事件进行跟踪;如果图层处理了该事件,那么传播过程结束;若图层不处理事件,管理者会将事件交由下一个图层,如果所有图层都不进行处理,那么管理者将事件交由系统自行处理,此时单个事件传播过程结束,管理者会继续从事件队列中取出处理,直至事件处理完成;

四、队列管理:队列管理模块保存了所创建的所有图层,依照图层唯一的ID进行快速访问,其掌握着从图层创建后所有的状态。

优选的,步骤一中的图层分类主要分为:正方形、矩形、圆角矩形、圆、椭圆、扇形、户型、多边形、文字。

优选的,步骤四中的图层创建后的状态主要包括:图层选中、图层属性更改、图层删除。

本发明的有益效果是:本发明提炼出不同基本图形绘制的条件,结合手势操作,简化绘制过程;并对绘制完成的图层提供状态管理;该方法有效的解决了Qt二维图层绘制过程繁琐、事件传播不穿透的问题。

附图说明

图1是现有技术中基于QWidget窗口部件自定义绘制图形的原理示意图;

图2是本发明一种使用Qt进行二维图层的绘制及事件处理方法中事件传播流程图。

具体实施方式

下面结合附图对本发明的较佳实施例进行详细阐述,以使本发明的优点和特征能更易于被本领域技术人员理解,从而对本发明的保护范围做出更为清楚明确的界定。

本发明实施例包括如下步骤:

一、图层绘制:对绘制的图层进行分类,对每种类型绘制时所需要提供的条件进行整理,绘制完成之后,图层自动进行尺寸的调整,将尺寸调整到可以最小包围绘制图形,然后将此图形加入到图层绘制队列,进行托管管理;

二、图层选择:在图层范围内点击任意部分激活图层;事件产生后,由队列管理模块将事件按照入队顺序反方向交由图层,图层在接收到事件后,自动将事件产生的位置转换成自身坐标值;图层依照自身的类型,加入旋转角度,判断绘制区域是否包含此点;在处理后,如果事件点位置在绘制图层区域之内,图层会进行选中,方便下步操作,否则事件忽略处理;

三、事件传播:管理者从事件队列里取出一事件,查看此事件源,依照图层唯一标识在队列中定位此图层,之后会依次地将事件交由在此图层之前创建的图层进行处理,并对此事件进行跟踪;如果图层处理了该事件,那么传播过程结束;若图层不处理事件,管理者会将事件交由下一个图层,如果所有图层都不进行处理,那么管理者将事件交由系统自行处理,此时单个事件传播过程结束,管理者会继续从事件队列中取出处理,直至事件处理完成;

四、队列管理:队列管理模块保存了所创建的所有图层,依照图层唯一的ID进行快速访问,其掌握着从图层创建后所有的状态。

进一步的,步骤一中的图层分类主要分为:正方形、矩形、圆角矩形、圆、椭圆、扇形、户型、多边形、文字。如当前图形库不满足需求时,也留有适当的接口,进行扩展。

进一步的,步骤二图层选择,QWidget图层是矩形,因此只要在其矩形范围内点击任意部分都可以激活图层。然而有的图层形状不是矩形,如圆、椭圆、弧、不规则图形等,在处理这些图形选择时,就不能简单的将其量化成矩形处理。如面对简单的圆形会计算点击的位置和圆心距离与半径进行比对;面对弧形时,会结合旋转角度,以及点击容差值进行计算;复杂的如不规则的多边形,会利用跨积算法等更精确的判定。

图2 是队列处理抛出事件的流程图:鼠标对某个图层进行操作,如果鼠标的位置没在当前图层绘制的图形路径上,当前图层会将鼠标点击的位置映射成全局值之后,并加入自身的信息一并包装成事件抛给队列管理者。队列管理者接收到事件之后,解析事件并获取有关抛出图层和事件的描述信息,从当前图层队列中找出抛出图层所在的索引,然后从此索引开始,依次取出图层。调用图层通用的接口,判断所取出的图层是包含了当前的鼠标点,当所取出的图层包含了当前鼠标,那么此图层会根据鼠标的类型,如单击、双击、移动,来分别进行响应处理。当处理成功后,通知队列管理者终止当前事件的传播。如果不包含,则管理者会继续取出下一个图层。重复上面的过程,直到有图层处理当前事件,或者没有图层处理该事件而结束。当没有图层处理该事件,队列管理者会将此事件交由系统进行处理,并等待下一次事件到来。

进一步的,队列管理模块保存了所创建的所有图层,可以依照图层唯一的ID进行快速访问,其掌握着从图层创建后所有的状态,如:图层选中、图层属性更改、图层删除等。

以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1