CN102929429A - 一种使用qt图形开发平台在arm下的多点触摸实现方法 - Google Patents
一种使用qt图形开发平台在arm下的多点触摸实现方法 Download PDFInfo
- Publication number
- CN102929429A CN102929429A CN2012103863475A CN201210386347A CN102929429A CN 102929429 A CN102929429 A CN 102929429A CN 2012103863475 A CN2012103863475 A CN 2012103863475A CN 201210386347 A CN201210386347 A CN 201210386347A CN 102929429 A CN102929429 A CN 102929429A
- Authority
- CN
- China
- Prior art keywords
- point
- report
- tslib
- development platform
- coordinate
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- User Interface Of Digital Computer (AREA)
Abstract
本发明公开一种使用QT图形开发平台在ARM下的多点触摸实现方法,使用QT图形开发平台在ARM下的多点触摸实现方法,本发明修改QT开源代码编译,使其在QT上GUI开发能够支持多点。本发明能够实现在使用QT图形开发平台在ARM下实现多点触摸的用户操作界面,可使用户更加方便、简单、友好的用户界面,通过多点触摸可以很灵活的实现图片动态放大、图片移动等多点手势操作。
Description
技术领域
本发明公开一种多点触摸实现方法,特别是一种使用QT图形开发平台在ARM下的多点触摸实现方法。
背景技术
Qt是一个1991年由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程式,也可用于开发非GUI程式,比如控制台工具和服务器。Qt是面向对象语言,易于扩展,并且允许组件编程。2008年,奇趣科技被诺基亚公司收购,QT也因此成为诺基亚旗下的编程语言工具。目前,QT的ARM版本是无法支持多点触摸手势并只能支持鼠标单点事件,给使用者和开发者造成很多不便。
发明内容
针对上述提到的现有技术中的QT图形开发平台不支持多点触摸的缺点,本发明提供一种新的使用QT图形开发平台在ARM下的多点触摸实现方法,本发明修改QT开源代码编译,使其在QT上GUI开发能够支持多点。
本发明解决其技术问题采用的技术方案是:一种使用QT图形开发平台在ARM下的多点触摸实现方法,该方法包括下述步骤:
(1) 移植触摸屏接口层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)值0表示第一点;
(5)上报第一点的X坐标值;
(6)上报第一点的Y坐标值;
(7)上报第一点的压力值;
(8)判断是否与SYN_REPORT相同;
(9)值1表示第二点;
(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消息至GUI用户层。
本发明的有益效果是:本发明能够实现在使用QT图形开发平台在ARM下实现多点触摸的用户操作界面,可使用户更加方便、简单、友好的用户界面,通过多点触摸可以很灵活的实现图片动态放大、图片移动等多点手势操作。
下面将结合附图和具体实施方式对本发明做进一步说明。
附图说明
图1为本发明系统流程图。
图2为本发明中多点触摸上报的流程图。
图3为本发明中ts_input_read函数多点上报流程图。
图4为本发明中改进后的函数流程图。
图5为本发明中qt_translateRawTouchEvent函数流程图。
图6为本发明中改进后的鼠标消息发送流程图。
具体实施方式
本实施例为本发明优选实施方式,其他凡其原理和基本结构与本实施例相同或近似的,均在本发明保护范围之内。
本发明中完成在QT图形开发平台在ARM下实现多点触摸的难点有(1)多点、屏幕滑动手势必须比鼠标点击滑动事件优先上报给GUI层界面。(2)在多窗口操作时如何保证手势消息上报主激活窗口。
请参看附图1,QT图形开发平台在ARM下多点触摸实现流程如图1所示,其主要包括下面几个步骤:
(1)移植触摸屏接口层(即提供给QT图形开发平台获取驱动多点坐标的接口)tslib模块;
(2)改进tslib模块实现多点上报;
(3)改进QT图形开发平台定义多点触摸。
本实施例中,移植触摸屏中间层tslib模块的过程如下:
(1) 先安装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; //上报的时间
__u16 type; //事件的类型
__u16 code; //事件的code码
__s32 value; //事件的值
};
事件的类型:
EV_KEY //表示事件为按键事件
code码:
BTN_TOUCH //这里表示触摸屏的所有键都抬起
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_TOUCH_MAJOR //这里表示事件value为多点压力值
ABS_MT_POSITION_X //表示事件value值为多点中X坐标
ABS_MT_POSITION_Y //表示事件value值为多点中Y坐标
上面将触摸屏驱动中使用到的定义进行了描述,下面主要来描述下多点触摸上报的流程,请参看附图2,其步骤如下:
(1)上报单点X坐标值;
(2)上报单点Y坐标值;
(3)上报压力值;
(4)值0表示第一点;
(5)上报第一点的X坐标值;
(6)上报第一点的Y坐标值;
(7)上报第一点的压力值;
(8)判断是否与SYN_REPORT相同;
(9)值1表示第二点;
(10) 上报第一点的X坐标值;
(11) 上报第一点的Y坐标值;
(12) 上报第一点的压力值;
(13) 依次重复步骤4-8;
(14) 判断是否与SYN_REPORT相同;
(15) 所有点抬起上报。
驱动设计按照上述的流程上报,现有技术中的QT使用的触摸屏的中间接口层为tslib模块,而tslib模块主要能够为触摸屏驱动获得的采样提供如滤波、去抖、校准等功能,通常作为触摸屏驱动的适配器,为上层应用提供统一的接口。但目前tslib模块无法支持多点,因此需要增加tslib模块的多点上报程序逻辑。
在开源代码tslib的plugins目录的input-raw.c文件中的read接口为驱动上报中间接口层tslib的入口位置,因此要支持多点上报,ts_input_read函数需要重新设计函数流程。请参看附图3,图3为ts_input_read函数多点上报流程图,包括如下步骤:
(1)、判断是否有上报点数,如果是,则结束;如果没有,则
(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图形开发平台的槽(即SLOT,QT提供API),只要触摸屏有采样点即会调用readMouseData函数进行处理,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消息至GUI用户层。
上面流程为多点手势实现,单点屏幕滑动手势实现需要采用默认的鼠标消息,改进后的鼠标消息流程请参看附图6,具体步骤如下:
(1)、获取触摸屏点;
(2)、判断是否按下,如果没有,则默认取消发送;如果是,则
(3)、将point点压入容器;
(4)、通过容器XY坐标点计算是否为手势操作;
(5)、判断是否有手势,如果没有,则默认取消发送;如果是,则
(6)、发送定义的手势消息;
(7)结束。
通过上面修改开源代码QT图形开发平台之后,就可以通过用户开发出多点(最多10点操作)触摸操作界面的用户程序,如:图片的放大可以通过上面自定义的TouchBegin(表示按下)、自定义TouchUpdate(表示两点或两点以上在移动具体哪个手指往哪个方向移动需要通过坐标、slot槽位值来区分)、自定义TouchEnd(表示手指已经抬起)等来实现,关于屏幕滑动手势可以通过自定义手势消息会直接发送到用户界面的Event成员函数,实现非常方便。
Claims (5)
1.一种使用QT图形开发平台在ARM下的多点触摸实现方法,其特征是:所述的方法包括下述步骤:
(1) 移植触摸屏接口层tslib模块;
(2) 改进tslib模块实现多点上报;
(3) 改进QT图形开发平台定义多点触摸。
2.根据权利要求1所述的使用QT图形开发平台在ARM下的多点触摸实现方法,其特征是:所述的移植触摸屏接口层tslib模块包括下述步骤:
(1) 先安装ARM的交叉编译器,然后配置tslib模块的编译为ARM的编译,并配置安装的路径;
(2) 第二步编译和安装tslib模块,编译之后的动态库、校正程序、测试程序、ts.conf文件会安装在第一步配置的路径下;
(3) 第三步配置tslib的环境变量包括图形framebuffer设备、触摸操作设备、TSLIB配置文件、tslib校正文件;
(4) 第四步为QT移植配置时应与tslib库关联一起。
3.根据权利要求1所述的使用QT图形开发平台在ARM下的多点触摸实现方法,其特征是:所述的多点上报的流程包括下述步骤:
(1) 上报单点X坐标值;
(2) 上报单点Y坐标值;
(3) 上报压力值;
(4) 值0表示第一点;
(5) 上报第一点的X坐标值;
(6) 上报第一点的Y坐标值;
(7) 上报第一点的压力值;
(8) 判断是否与SYN_REPORT相同;
(9) 值1表示第二点;
(10) 上报第一点的X坐标值;
(11) 上报第一点的Y坐标值;
(12) 上报第一点的压力值;
(13) 依次重复步骤4-8;
(14) 判断是否与SYN_REPORT相同;
(15) 所有点抬起上报。
4.根据权利要求1所述的使用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消息至GUI用户层。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2012103863475A CN102929429A (zh) | 2012-10-12 | 2012-10-12 | 一种使用qt图形开发平台在arm下的多点触摸实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2012103863475A CN102929429A (zh) | 2012-10-12 | 2012-10-12 | 一种使用qt图形开发平台在arm下的多点触摸实现方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102929429A true CN102929429A (zh) | 2013-02-13 |
Family
ID=47644254
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2012103863475A Pending CN102929429A (zh) | 2012-10-12 | 2012-10-12 | 一种使用qt图形开发平台在arm下的多点触摸实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102929429A (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106896956A (zh) * | 2017-01-18 | 2017-06-27 | 长沙湘计海盾科技有限公司 | 一种“道”系统下多点触控的实现方法 |
CN107728841A (zh) * | 2017-10-17 | 2018-02-23 | 中国船舶重工集团公司第七0九研究所 | 基于中标麒麟操作系统的多点触控方法及系统 |
US9927917B2 (en) | 2015-10-29 | 2018-03-27 | Microsoft Technology Licensing, Llc | Model-based touch event location adjustment |
CN111352529A (zh) * | 2020-02-20 | 2020-06-30 | Oppo(重庆)智能科技有限公司 | 触摸事件的上报方法、装置、终端及存储介质 |
CN113656029A (zh) * | 2021-08-18 | 2021-11-16 | 天津津航计算技术研究所 | 一种Qt应用在VxWorks操作系统下响应触摸屏事件的方法 |
CN115629678A (zh) * | 2022-12-01 | 2023-01-20 | 南京翼辉信息技术有限公司 | 一种触摸信息的处理方法、装置、设备及存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102214102A (zh) * | 2011-07-06 | 2011-10-12 | 上海智翔信息科技股份有限公司 | 一种移植qt到arm的系统 |
-
2012
- 2012-10-12 CN CN2012103863475A patent/CN102929429A/zh active Pending
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102214102A (zh) * | 2011-07-06 | 2011-10-12 | 上海智翔信息科技股份有限公司 | 一种移植qt到arm的系统 |
Non-Patent Citations (2)
Title |
---|
BRADLEY T. HUGHES: "Change behavior of how touch and mouse events work together", 《CHANGE BEHAVIOR OF HOW TOUCH AND MOUSE EVENTS WORK TOGETHER》 * |
JOARD_YANG: "Linux 内核驱动--多点触摸接口", 《LINUX 内核驱动--多点触摸接口》 * |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9927917B2 (en) | 2015-10-29 | 2018-03-27 | Microsoft Technology Licensing, Llc | Model-based touch event location adjustment |
CN106896956A (zh) * | 2017-01-18 | 2017-06-27 | 长沙湘计海盾科技有限公司 | 一种“道”系统下多点触控的实现方法 |
CN106896956B (zh) * | 2017-01-18 | 2019-11-05 | 长沙湘计海盾科技有限公司 | 一种“道”系统下多点触控的实现方法 |
CN107728841A (zh) * | 2017-10-17 | 2018-02-23 | 中国船舶重工集团公司第七0九研究所 | 基于中标麒麟操作系统的多点触控方法及系统 |
CN107728841B (zh) * | 2017-10-17 | 2021-04-09 | 中国船舶重工集团公司第七0九研究所 | 基于中标麒麟操作系统的多点触控方法及系统 |
CN111352529A (zh) * | 2020-02-20 | 2020-06-30 | Oppo(重庆)智能科技有限公司 | 触摸事件的上报方法、装置、终端及存储介质 |
CN111352529B (zh) * | 2020-02-20 | 2022-11-08 | Oppo(重庆)智能科技有限公司 | 触摸事件的上报方法、装置、终端及存储介质 |
CN113656029A (zh) * | 2021-08-18 | 2021-11-16 | 天津津航计算技术研究所 | 一种Qt应用在VxWorks操作系统下响应触摸屏事件的方法 |
CN115629678A (zh) * | 2022-12-01 | 2023-01-20 | 南京翼辉信息技术有限公司 | 一种触摸信息的处理方法、装置、设备及存储介质 |
CN115629678B (zh) * | 2022-12-01 | 2023-03-31 | 南京翼辉信息技术有限公司 | 一种触摸信息的处理方法、装置、设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8355007B2 (en) | Methods for use with multi-touch displays for determining when a touch is processed as a mouse event | |
CN102929429A (zh) | 一种使用qt图形开发平台在arm下的多点触摸实现方法 | |
US10140014B2 (en) | Method and terminal for activating application based on handwriting input | |
US20220244844A1 (en) | Single contact scaling gesture | |
CN101853119B (zh) | 电子装置及屏幕的操作方法 | |
US9524176B2 (en) | Method and system for binding graphical interfaces to textual code | |
US20130132878A1 (en) | Touch enabled device drop zone | |
CN102053911A (zh) | 基于Android的自动化测试方法、系统及移动终端 | |
CN101963857A (zh) | 多点触控作业环境下的触控装置、控制方法及控制单元 | |
CN113032273B (zh) | 一种应用程序的调试方法、装置、计算机设备和存储介质 | |
CN103577029A (zh) | 应用程序控制系统及方法 | |
CN102422264A (zh) | 事件识别 | |
CN103092518B (zh) | 一种基于rdp协议的移动云桌面精确触控方法 | |
AU2014275440A1 (en) | Touch detection at bezel edge | |
CN111770368A (zh) | 大屏幕显示设备的控制方法、装置、存储介质和电子设备 | |
CN102830997A (zh) | 一种插件安装的控制方法、装置及设备 | |
CN103577079A (zh) | 电子设备中实现与应用交互的方法及电子设备 | |
CN103744530A (zh) | 键盘实现触摸功能的系统、终端及方法 | |
US20150007130A1 (en) | Software development using gestures | |
CN111078104A (zh) | 一种云桌面上的多点触控设备的重定向方法及计算机设备 | |
US10168898B2 (en) | Supporting different event models using a single input source | |
CN102929688B (zh) | 一种模拟触摸屏的模拟器实现方法及该模拟器 | |
WO2012001037A1 (en) | Display with shared control panel for different input sources | |
CN103809793A (zh) | 一种信息处理方法和电子设备 | |
US20150317046A1 (en) | Touch sensitive display |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20130213 |