一种使用qt图形开发平台在arm下的多点触摸实现方法

文档序号:6378690阅读:2466来源:国知局
专利名称:一种使用qt图形开发平台在arm下的多点触摸实现方法
技术领域
本发明公开一种多点触摸实现方法,特别是一种使用QT图形开发平台在ARM下的多点触摸实现方法。
背景技术
Qt是一个1991年由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发⑶I程式,也可用于开发非⑶I程式,比如控制台工具和服务器。Qt是面向对象语言,易于扩展,并且允许组件编程。2008年,奇趣科技被诺基亚公司收购,QT也因此成 为诺基亚旗下的编程语言工具。目前,QT的ARM版本是无法支持多点触摸手势并只能支持鼠标单点事件,给使用者和开发者造成很多不便。

发明内容
针对上述提到的现有技术中的QT图形开发平台不支持多点触摸的缺点,本发明提供一种新的使用QT图形开发平台在ARM下的多点触摸实现方法,本发明修改QT开源代码编译,使其在QT上⑶I开发能够支持多点。本发明解决其技术问题采用的技术方案是一种使用QT图形开发平台在ARM下的多点触摸实现方法,该方法包括下述步骤
(O移植触摸屏接口层tslib模块;
(2)改进tslib模块实现多点上报;
(3)改进QT图形开发平台定义多点触摸。本发明解决其技术问题采用的技术方案进一步还包括
所述的移植触摸屏接口层tslib模块包括下述步骤
(1)先安装ARM的交叉编译器,然后配置tslib模块的编译为ARM的编译,并配置安装的路径;
(2)第二步编译和安装tslib模块,编译之后的动态库、校正程序、测试程序、ts.conf文件会安装在第一步配置的路径下;
(3)第三步配置tslib的环境变量包括图形framebuffer设备、触摸操作设备、TSLIB配置文件、tslib校正文件;
(4)第四步为QT移植配置时应与tslib库关联一起。所述的多点上报的流程包括下述步骤
(1)上报单点X坐标值;
(2)上报单点Y坐标值;
(3)上报压力值;
(4)值O表不第一点;
(5)上报第一点的X坐标值;
(6)上报第一点的Y坐标值;(7)上报第一点的压力值;
(8)判断是否与SYN_REPORT相同;
(9)值I表示第二点;
(10)上报第一点的X坐标值;
(11)上报第一点的Y坐标值;
(12)上报第一点的压力值;
(13)依次重复步骤4-8;
(14)判断是否与SYN_REPORT相同;
(15)所有点抬起上报。所述的改进QT图形开发平台包括下述步骤
(1)、通过tslib接口获取采样点;
(2)、判断是否有采样点,如果没有则结束;如果有,则
(3)、初始化采样点坐标;
(4)、判断是否为多点触摸(本实施例中,判断Slot是否大于0),如果不是则将一点时间坐标、按下状态发送至上层;如果是,则
(5)、通过采样点X、Y压力值初始化TouchPoint;
(6)、通过压力值判断是否有按下,如果没有,则State状态置为TouchPointRelease;如果有,则
(7)判断是否刚按下,如果是,则State状态置为TouchPointPressed,然后转至步骤9;如果不是,则
(8)判断跟上次坐标点是否未移动,如果是,则State状态置为TouchPointStationary,然后转至步骤9 ;如果不是则State状态置为TouchPointMoved,然后转至步骤9 ;
(9)通过函数qt_translateRawTouchEvent 发送 touchpoint 至上层。所述的函数qt_translateRawTouchEvent发送touchpoint至上层包括下述步骤
(1)获取应用的activeWindow窗口;
(2)判断TouchPoint容器是否有数据,如果没有,则结束;如果有,则
(3)从touchpoint容器中获取point值;
(4)根据point值的情况选择发送内容;
(5)通过激活窗口发送touch消息至⑶I用户层。本发明的有益效果是本发明能够实现在使用QT图形开发平台在ARM下实现多点触摸的用户操作界面,可使用户更加方便、简单、友好的用户界面,通过多点触摸可以很灵活的实现图片动态放大、图片移动等多点手势操作。下面将结合附图和具体实施方式
对本发明做进一步说明。


图I为本发明系统流程图。图2为本发明中多点触摸上报的流程图。
图3为本发明中ts_input_read函数多点上报流程图。图4为本发明中改进后的函数流程图。图5为本发明中qt_translateRawTouchEvent函数流程图。图6为本发明中改进后的鼠标消息发送流程图。
具体实施例方式本实施例为本发明优选实施方式,其他凡其原理和基本结构与本实施例相同或近似的,均在本发明保护范围之内。本发明中完成在QT图形开发平台在ARM下实现多点触摸的难点有(I)多点、屏幕滑动手势必须比鼠标点击滑动事件优先上报给GUI层界面。(2)在多窗口操作时如何保证手势消息上报主激活窗口。·请参看附图1,QT图形开发平台在ARM下多点触摸实现流程如图I所示,其主要包括下面几个步骤
(1)移植触摸屏接口层(即提供给QT图形开发平台获取驱动多点坐标的接口)tslib模
块;
(2)改进tslib模块实现多点上报;
(3)改进QT图形开发平台定义多点触摸。本实施例中,移植触摸屏中间层tslib模块的过程如下
(I)先安装ARM的交叉编译器,然后配置tslib模块的编译为ARM的编译,并配置安装的路径。(2)第二步编译和安装tslib模块,编译之后的动态库、校正程序、测试程序、ts. conf文件会安装在第一步配置的路径下。(3)第三步配置tslib的环境变量包括图形framebuffer设备、触摸操作设备、TSLIB配置文件、tslib校正文件。(4)第四步为QT移植配置时应与tslib库关联一起。本实施例中,改进tslib模块实现多点上报
首先要在ARM下支持多点触摸需要使用电容式触摸屏,并且需要实现电容式触摸屏的驱动程序,并通过一定规则(具体规则描述请参看附图2及相应文字部分)返回多个点给上层(即tslib接口层)应用程序,本实施例中,电容式触摸屏的驱动实现中用到了以下驱动的定义
事件上报结构体定义,下述函数为系统自带函数 struct input_event {
Struct timeval time; // 上报的时间—ul6 type;//事件的类型
—ul6 code;//事件的 code 码
—s32 value;//事件的值
};
事件的类型
EV_KEYIl表示事件为按键事件code石马
BTN_T0UCH//这里表示触摸屏的所有键都抬

EV_SYN//表示事件为同步事件,收集点
结束
Code石马
SYN_REPORT//提交所有收集的采样点,如两点触摸采集了两
个就会上报该code码
SYN_MT_REPORT //与SYN_REPORT相同,该驱动上报的就是该
code
EV_ABS//表示事件为XY坐标、压力、槽位值
ABS_X//表示事件value值为单点X坐标
ABS_Y//表示事件value值为单点Y坐标
ABS_PRESSURE//表示事件value值为单点压力值,一般
用来区分该点是否按下
ABS_MT_SLOT//表示事件value值为槽位值,用来区分触摸
屏的第几点坐标,多点时首先会返回该code表示下的坐标、压力值为第几点值。ABS_MT_T0UCH_MAJ0R//这里表示事件 value 为多
点压力值
ABS_MT_P0SITI0N_X//表示事件value值为多点中X
坐标
ABS_MT_P0SITI0N_Y//表示事件value值为多点中Y
坐标
上面将触摸屏驱动中使用到的定义进行了描述,下面主要来描述下多点触摸上报的流程,请参看附图2,其步骤如下
(1)上报单点X坐标值;
(2)上报单点Y坐标值;
(3)上报压力值;
(4)值O表不第一点;
(5)上报第一点的X坐标值;
(6)上报第一点的Y坐标值;
(7)上报第一点的压力值;
(8)判断是否与SYN_REP0RT相同;
(9)值I表示第二点;
(10)上报第一点的X坐标值;
(11)上报第一点的Y坐标值;
(12)上报第一点的压力值;
(13)依次重复步骤4-8;
(14)判断是否与SYN_REP0RT相同;(15)所有点抬起上报。驱动设计按照上述的流程上报,现有技术中的QT使用的触摸屏的中间接口层为tslib模块,而tslib模块主要能够为触摸屏驱动获得的采样提供如滤波、去抖、校准等功能,通常作为触摸屏驱动的适配器,为上层应用提供统一的接口。但目前tslib模块无法支持多点,因此需要增加tslib模块的多点上报程序逻辑。在开源代码tslib的plugins目录的input-raw. c文件中的read接口为驱动上报中间接口层tslib的入口位置,因此要支持多点上报,ts_input_read函数需要重新设计函数流程。请参看附图3,图3为ts_input_read函数多点上报流程图,包括如下步骤
(I )、判断是否有上报点数,如果是,则结束;如果没有,则
(2)、读取input_event 事件;(3)、读取字节数<sizeof(struct input_event);
(4)、判断Input_event的type类型,并根据类型上报相应内容。通过ts_input_read函数采集的点依次通过滤波、去抖、校准逻辑等功能,然后最终得出的计算后的点返回上层。通过上面修改开源代码QT图形开发平台之后,就可以通过用户开发出多点(最多10点操作)触摸操作界面的用户程序,如图片的放大可以通过上面自定义的TouchBegin(表示按下)、自定义TouchUpdate (表示两点或两点以上在移动具体哪个手指往哪个方向移动需要通过坐标、slot槽位值来区分)、自定义TouchEnd (表示手指已经抬起)等来实现,关于屏幕滑动手势可以通过自定义手势消息会直接发送到用户界面的Event成员函数,实现非常方便。实现QT下多点触摸的功能主要需要改进QT图形开发平台里面文件qmousetslib_qws. cpp 中的 QWSTslibMouseHandlerPrivate: :readMouseData 成员函数,该函数是定义为QT图形开发平台的槽(即311)1',01'提供4 1),只要触摸屏有采样点即会调用^&(^011860&七3函数进行处理,readMouseData函数直接与tslib模块关联,即ReadMouseData函数调用tslib接口函数。请参看附图4,本实施例中,改进后的函数流程图如图所示,需支持多点函数为入口函数,包括下述步骤
(1)、通过tslib接口获取采样点;
(2)、判断是否有采样点,如果没有则结束;如果有,则
(3)、初始化采样点坐标;
(4)、判断是否为多点触摸(本实施例中,判断Slot是否大于0),如果不是则将一点时间坐标、按下状态发送至上层;如果是,则
(5)、通过采样点X、Y压力值初始化TouchPoint;
(6)、通过压力值判断是否有按下,如果没有,则State状态置为TouchPointRelease;如果有,则
(7)判断是否刚按下,如果是,则State状态置为TouchPointPressed,然后转至步骤9;如果不是,则
(8)判断跟上次坐标点是否未移动,如果是,则State状态置为TouchPointStationary,然后转至步骤9 ;如果不是则State状态置为TouchPointMoved,然后转至步骤9 ;
(9)通过函数qt_translateRawTouchEvent 发送 touchpoint 至上层(即用户层)。
本实施例中,readMouseData函数通过tslib模块返回的坐标、压力和槽位来区分多点和单点触摸并进行区分,分别发至消息事件层,本实施例中,如果检测多点手势后截取单点事件流程,从而使用户进行多点手势时不会触发单点事件操作。上面流程中调用了 qt_translateRawTouchEvent函数发送TouchPoint至用户层(即QT界面设计层),该函数流程图请参看附图5,包括下述步骤
(1)获取应用的activeWindow窗口;
(2)判断TouchPoint容器是否有数据,如果没有,则结束;如果有,则
(3)从touchpoint容器中获取point值;
(4)根据point值的情况选择发送内容;
(5)通过激活窗口发送touch消息至⑶I用户层。 上面流程为多点手势实现,单点屏幕滑动手势实现需要采用默认的鼠标消息,改进后的鼠标消息流程请参看附图6,具体步骤如下
(1)、获取触摸屏点;
(2)、判断是否按下,如果没有,则默认取消发送;如果是,则
(3)、将point点压入容器;
(4)、通过容器XY坐标点计算是否为手势操作;
(5)、判断是否有手势,如果没有,则默认取消发送;如果是,则
(6)、发送定义的手势消息;
(7)结束。通过上面修改开源代码QT图形开发平台之后,就可以通过用户开发出多点(最多10点操作)触摸操作界面的用户程序,如图片的放大可以通过上面自定义的TouchBegin(表示按下)、自定义TouchUpdate (表示两点或两点以上在移动具体哪个手指往哪个方向移动需要通过坐标、slot槽位值来区分)、自定义TouchEnd (表示手指已经抬起)等来实现,关于屏幕滑动手势可以通过自定义手势消息会直接发送到用户界面的Event成员函数,实现非常方便。
权利要求
1.一种使用QT图形开发平台在ARM下的多点触摸实现方法,其特征是所述的方法包括下述步骤 (1)移植触摸屏接口层tslib模块; (2)改进tslib模块实现多点上报; (3)改进QT图形开发平台定义多点触摸。
2.根据权利要求I所述的使用QT图形开发平台在ARM下的多点触摸实现方法,其特征是所述的移植触摸屏接口层tslib模块包括下述步骤 (1)先安装ARM的交叉编译器,然后配置tslib模块的编译为ARM的编译,并配置安装的路径; (2)第二步编译和安装tslib模块,编译之后的动态库、校正程序、测试程序、ts. conf文件会安装在第一步配置的路径下; (3)第三步配置tslib的环境变量包括图形framebuffer设备、触摸操作设备、TSLIB配置文件、tslib校正文件; (4)第四步为QT移植配置时应与tslib库关联一起。
3.根据权利要求I所述的使用QT图形开发平台在ARM下的多点触摸实现方法,其特征是所述的多点上报的流程包括下述步骤 (1)上报单点X坐标值; (2)上报单点Y坐标值; (3)上报压力值; (4)值0表不第一点; (5)上报第一点的X坐标值; (6)上报第一点的Y坐标值; (7)上报第一点的压力值; (8 ) 判断是否与SYN_REPORT相同; (9)值I表示第二点; (10)上报第一点的X坐标值; (11)上报第一点的Y坐标值; (12)上报第一点的压力值; (13)依次重复步骤4-8; (14)判断是否与SYN_REPORT相同; (15)所有点抬起上报。
4.根据权利要求I所述的使用QT图形开发平台在ARM下的多点触摸实现方法,其特征是所述的改进QT图形开发平台包括下述步骤 (1)、通过tslib接口获取采样点; (2)、判断是否有采样点,如果没有则结束;如果有,则 (3)、初始化采样点坐标; (4)、判断是否为多点触摸(本实施例中,判断Slot是否大于0),如果不是则将一点时间坐标、按下状态发送至上层;如果是,则 (5)、通过采样点X、Y压力值初始化TouchPoint;(6)、通过压力值判断是否有按下,如果没有,则State状态置为TouchPointRelease;如果有,则 (7)判断是否刚按下,如果是,则State状态置为TouchPointPressed,然后转至步骤9;如果不是,则 (8)判断跟上次坐标点是否未移动,如果是,则State状态置为TouchPointStationary,然后转至步骤9 ;如果不是则State状态置为TouchPointMoved,然后转至步骤9 ; (9)通过函数qt_translateRawTouchEvent 发送 touchpoint 至上层。
5.根据权利要求4所述的使用QT图形开发平台在ARM下的多点触摸实现方法,其特征是所述的函数qt_translateRawTouchEvent发送touchpoint至上层包括下述步骤 (1)获取应用的activeWindow窗口; (2)判断TouchPoint容器是否有数据,如果没有,则结束;如果有,则 (3)从touchpoint容器中获取point值; (4)根据point值的情况选择发送内容; (5)通过激活窗口发送touch消息至⑶I用户层。
全文摘要
本发明公开一种使用QT图形开发平台在ARM下的多点触摸实现方法,使用QT图形开发平台在ARM下的多点触摸实现方法,本发明修改QT开源代码编译,使其在QT上GUI开发能够支持多点。本发明能够实现在使用QT图形开发平台在ARM下实现多点触摸的用户操作界面,可使用户更加方便、简单、友好的用户界面,通过多点触摸可以很灵活的实现图片动态放大、图片移动等多点手势操作。
文档编号G06F9/44GK102929429SQ20121038634
公开日2013年2月13日 申请日期2012年10月12日 优先权日2012年10月12日
发明者杨绍华, 廖海 申请人:深圳锐取信息技术股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1