專利名稱:一種使用qt圖形開發(fā)平臺在arm下的多點觸摸實現(xiàn)方法
技術(shù)領(lǐng)域:
本發(fā)明公開一種多點觸摸實現(xiàn)方法,特別是一種使用QT圖形開發(fā)平臺在ARM下的多點觸摸實現(xiàn)方法。
背景技術(shù):
Qt是一個1991年由奇趣科技開發(fā)的跨平臺C++圖形用戶界面應(yīng)用程序開發(fā)框架。它既可以開發(fā)⑶I程式,也可用于開發(fā)非⑶I程式,比如控制臺工具和服務(wù)器。Qt是面向?qū)ο笳Z言,易于擴展,并且允許組件編程。2008年,奇趣科技被諾基亞公司收購,QT也因此成 為諾基亞旗下的編程語言工具。目前,QT的ARM版本是無法支持多點觸摸手勢并只能支持鼠標單點事件,給使用者和開發(fā)者造成很多不便。
發(fā)明內(nèi)容
針對上述提到的現(xiàn)有技術(shù)中的QT圖形開發(fā)平臺不支持多點觸摸的缺點,本發(fā)明提供一種新的使用QT圖形開發(fā)平臺在ARM下的多點觸摸實現(xiàn)方法,本發(fā)明修改QT開源代碼編譯,使其在QT上⑶I開發(fā)能夠支持多點。本發(fā)明解決其技術(shù)問題采用的技術(shù)方案是一種使用QT圖形開發(fā)平臺在ARM下的多點觸摸實現(xiàn)方法,該方法包括下述步驟
(O移植觸摸屏接口層tslib模塊;
(2)改進tslib模塊實現(xiàn)多點上報;
(3)改進QT圖形開發(fā)平臺定義多點觸摸。本發(fā)明解決其技術(shù)問題采用的技術(shù)方案進一步還包括
所述的移植觸摸屏接口層tslib模塊包括下述步驟
(1)先安裝ARM的交叉編譯器,然后配置tslib模塊的編譯為ARM的編譯,并配置安裝的路徑;
(2)第二步編譯和安裝tslib模塊,編譯之后的動態(tài)庫、校正程序、測試程序、ts.conf文件會安裝在第一步配置的路徑下;
(3)第三步配置tslib的環(huán)境變量包括圖形framebuffer設(shè)備、觸摸操作設(shè)備、TSLIB配置文件、tslib校正文件;
(4)第四步為QT移植配置時應(yīng)與tslib庫關(guān)聯(lián)一起。所述的多點上報的流程包括下述步驟
(1)上報單點X坐標值;
(2)上報單點Y坐標值;
(3)上報壓力值;
(4)值O表不第一點;
(5)上報第一點的X坐標值;
(6)上報第一點的Y坐標值;(7)上報第一點的壓力值;
(8)判斷是否與SYN_REPORT相同;
(9)值I表示第二點;
(10)上報第一點的X坐標值;
(11)上報第一點的Y坐標值;
(12)上報第一點的壓力值;
(13)依次重復(fù)步驟4-8;
(14)判斷是否與SYN_REPORT相同;
(15)所有點抬起上報。所述的改進QT圖形開發(fā)平臺包括下述步驟
(1)、通過tslib接口獲取采樣點;
(2)、判斷是否有采樣點,如果沒有則結(jié)束;如果有,則
(3)、初始化采樣點坐標;
(4)、判斷是否為多點觸摸(本實施例中,判斷Slot是否大于0),如果不是則將一點時間坐標、按下狀態(tài)發(fā)送至上層;如果是,則
(5)、通過采樣點X、Y壓力值初始化TouchPoint;
(6)、通過壓力值判斷是否有按下,如果沒有,則State狀態(tài)置為TouchPointRelease;如果有,則
(7)判斷是否剛按下,如果是,則State狀態(tài)置為TouchPointPressed,然后轉(zhuǎn)至步驟9;如果不是,則
(8)判斷跟上次坐標點是否未移動,如果是,則State狀態(tài)置為TouchPointStationary,然后轉(zhuǎn)至步驟9 ;如果不是則State狀態(tài)置為TouchPointMoved,然后轉(zhuǎn)至步驟9 ;
(9)通過函數(shù)qt_translateRawTouchEvent 發(fā)送 touchpoint 至上層。所述的函數(shù)qt_translateRawTouchEvent發(fā)送touchpoint至上層包括下述步驟
(1)獲取應(yīng)用的activeWindow窗口;
(2)判斷TouchPoint容器是否有數(shù)據(jù),如果沒有,則結(jié)束;如果有,則
(3)從touchpoint容器中獲取point值;
(4)根據(jù)point值的情況選擇發(fā)送內(nèi)容;
(5)通過激活窗口發(fā)送touch消息至⑶I用戶層。本發(fā)明的有益效果是本發(fā)明能夠?qū)崿F(xiàn)在使用QT圖形開發(fā)平臺在ARM下實現(xiàn)多點觸摸的用戶操作界面,可使用戶更加方便、簡單、友好的用戶界面,通過多點觸摸可以很靈活的實現(xiàn)圖片動態(tài)放大、圖片移動等多點手勢操作。下面將結(jié)合附圖和具體實施方式
對本發(fā)明做進一步說明。
圖I為本發(fā)明系統(tǒng)流程圖。圖2為本發(fā)明中多點觸摸上報的流程圖。
圖3為本發(fā)明中ts_input_read函數(shù)多點上報流程圖。圖4為本發(fā)明中改進后的函數(shù)流程圖。圖5為本發(fā)明中qt_translateRawTouchEvent函數(shù)流程圖。圖6為本發(fā)明中改進后的鼠標消息發(fā)送流程圖。
具體實施例方式本實施例為本發(fā)明優(yōu)選實施方式,其他凡其原理和基本結(jié)構(gòu)與本實施例相同或近似的,均在本發(fā)明保護范圍之內(nèi)。本發(fā)明中完成在QT圖形開發(fā)平臺在ARM下實現(xiàn)多點觸摸的難點有(I)多點、屏幕滑動手勢必須比鼠標點擊滑動事件優(yōu)先上報給GUI層界面。(2)在多窗口操作時如何保證手勢消息上報主激活窗口?!ふ垍⒖锤綀D1,QT圖形開發(fā)平臺在ARM下多點觸摸實現(xiàn)流程如圖I所示,其主要包括下面幾個步驟
(1)移植觸摸屏接口層(即提供給QT圖形開發(fā)平臺獲取驅(qū)動多點坐標的接口)tslib模
塊;
(2)改進tslib模塊實現(xiàn)多點上報;
(3)改進QT圖形開發(fā)平臺定義多點觸摸。本實施例中,移植觸摸屏中間層tslib模塊的過程如下
(I)先安裝ARM的交叉編譯器,然后配置tslib模塊的編譯為ARM的編譯,并配置安裝的路徑。(2)第二步編譯和安裝tslib模塊,編譯之后的動態(tài)庫、校正程序、測試程序、ts. conf文件會安裝在第一步配置的路徑下。(3)第三步配置tslib的環(huán)境變量包括圖形framebuffer設(shè)備、觸摸操作設(shè)備、TSLIB配置文件、tslib校正文件。(4)第四步為QT移植配置時應(yīng)與tslib庫關(guān)聯(lián)一起。本實施例中,改進tslib模塊實現(xiàn)多點上報
首先要在ARM下支持多點觸摸需要使用電容式觸摸屏,并且需要實現(xiàn)電容式觸摸屏的驅(qū)動程序,并通過一定規(guī)則(具體規(guī)則描述請參看附圖2及相應(yīng)文字部分)返回多個點給上層(即tslib接口層)應(yīng)用程序,本實施例中,電容式觸摸屏的驅(qū)動實現(xiàn)中用到了以下驅(qū)動的定義
事件上報結(jié)構(gòu)體定義,下述函數(shù)為系統(tǒng)自帶函數(shù) struct input_event {
Struct timeval time; // 上報的時間—ul6 type;//事件的類型
—ul6 code;//事件的 code 碼
—s32 value;//事件的值
};
事件的類型
EV_KEYIl表示事件為按鍵事件code石馬
BTN_T0UCH//這里表示觸摸屏的所有鍵都抬
起
EV_SYN//表示事件為同步事件,收集點
結(jié)束
Code石馬
SYN_REPORT//提交所有收集的采樣點,如兩點觸摸采集了兩
個就會上報該code碼
SYN_MT_REPORT //與SYN_REPORT相同,該驅(qū)動上報的就是該
code
EV_ABS//表示事件為XY坐標、壓力、槽位值
ABS_X//表示事件value值為單點X坐標
ABS_Y//表示事件value值為單點Y坐標
ABS_PRESSURE//表示事件value值為單點壓力值,一般
用來區(qū)分該點是否按下
ABS_MT_SLOT//表示事件value值為槽位值,用來區(qū)分觸摸
屏的第幾點坐標,多點時首先會返回該code表示下的坐標、壓力值為第幾點值。ABS_MT_T0UCH_MAJ0R//這里表示事件 value 為多
點壓力值
ABS_MT_P0SITI0N_X//表示事件value值為多點中X
坐標
ABS_MT_P0SITI0N_Y//表示事件value值為多點中Y
坐標
上面將觸摸屏驅(qū)動中使用到的定義進行了描述,下面主要來描述下多點觸摸上報的流程,請參看附圖2,其步驟如下
(1)上報單點X坐標值;
(2)上報單點Y坐標值;
(3)上報壓力值;
(4)值O表不第一點;
(5)上報第一點的X坐標值;
(6)上報第一點的Y坐標值;
(7)上報第一點的壓力值;
(8)判斷是否與SYN_REP0RT相同;
(9)值I表示第二點;
(10)上報第一點的X坐標值;
(11)上報第一點的Y坐標值;
(12)上報第一點的壓力值;
(13)依次重復(fù)步驟4-8;
(14)判斷是否與SYN_REP0RT相同;(15)所有點抬起上報。驅(qū)動設(shè)計按照上述的流程上報,現(xiàn)有技術(shù)中的QT使用的觸摸屏的中間接口層為tslib模塊,而tslib模塊主要能夠為觸摸屏驅(qū)動獲得的采樣提供如濾波、去抖、校準等功能,通常作為觸摸屏驅(qū)動的適配器,為上層應(yīng)用提供統(tǒng)一的接口。但目前tslib模塊無法支持多點,因此需要增加tslib模塊的多點上報程序邏輯。在開源代碼tslib的plugins目錄的input-raw. c文件中的read接口為驅(qū)動上報中間接口層tslib的入口位置,因此要支持多點上報,ts_input_read函數(shù)需要重新設(shè)計函數(shù)流程。請參看附圖3,圖3為ts_input_read函數(shù)多點上報流程圖,包括如下步驟
(I )、判斷是否有上報點數(shù),如果是,則結(jié)束;如果沒有,則
(2)、讀取input_event 事件;(3)、讀取字節(jié)數(shù)<sizeof(struct input_event);
(4)、判斷Input_event的type類型,并根據(jù)類型上報相應(yīng)內(nèi)容。通過ts_input_read函數(shù)采集的點依次通過濾波、去抖、校準邏輯等功能,然后最終得出的計算后的點返回上層。通過上面修改開源代碼QT圖形開發(fā)平臺之后,就可以通過用戶開發(fā)出多點(最多10點操作)觸摸操作界面的用戶程序,如圖片的放大可以通過上面自定義的TouchBegin(表示按下)、自定義TouchUpdate (表示兩點或兩點以上在移動具體哪個手指往哪個方向移動需要通過坐標、slot槽位值來區(qū)分)、自定義TouchEnd (表示手指已經(jīng)抬起)等來實現(xiàn),關(guān)于屏幕滑動手勢可以通過自定義手勢消息會直接發(fā)送到用戶界面的Event成員函數(shù),實現(xiàn)非常方便。實現(xiàn)QT下多點觸摸的功能主要需要改進QT圖形開發(fā)平臺里面文件qmousetslib_qws. cpp 中的 QWSTslibMouseHandlerPrivate: :readMouseData 成員函數(shù),該函數(shù)是定義為QT圖形開發(fā)平臺的槽(即311)1',01'提供4 1),只要觸摸屏有采樣點即會調(diào)用^&(^011860&七3函數(shù)進行處理,readMouseData函數(shù)直接與tslib模塊關(guān)聯(lián),即ReadMouseData函數(shù)調(diào)用tslib接口函數(shù)。請參看附圖4,本實施例中,改進后的函數(shù)流程圖如圖所示,需支持多點函數(shù)為入口函數(shù),包括下述步驟
(1)、通過tslib接口獲取采樣點;
(2)、判斷是否有采樣點,如果沒有則結(jié)束;如果有,則
(3)、初始化采樣點坐標;
(4)、判斷是否為多點觸摸(本實施例中,判斷Slot是否大于0),如果不是則將一點時間坐標、按下狀態(tài)發(fā)送至上層;如果是,則
(5)、通過采樣點X、Y壓力值初始化TouchPoint;
(6)、通過壓力值判斷是否有按下,如果沒有,則State狀態(tài)置為TouchPointRelease;如果有,則
(7)判斷是否剛按下,如果是,則State狀態(tài)置為TouchPointPressed,然后轉(zhuǎn)至步驟9;如果不是,則
(8)判斷跟上次坐標點是否未移動,如果是,則State狀態(tài)置為TouchPointStationary,然后轉(zhuǎn)至步驟9 ;如果不是則State狀態(tài)置為TouchPointMoved,然后轉(zhuǎn)至步驟9 ;
(9)通過函數(shù)qt_translateRawTouchEvent 發(fā)送 touchpoint 至上層(即用戶層)。
本實施例中,readMouseData函數(shù)通過tslib模塊返回的坐標、壓力和槽位來區(qū)分多點和單點觸摸并進行區(qū)分,分別發(fā)至消息事件層,本實施例中,如果檢測多點手勢后截取單點事件流程,從而使用戶進行多點手勢時不會觸發(fā)單點事件操作。上面流程中調(diào)用了 qt_translateRawTouchEvent函數(shù)發(fā)送TouchPoint至用戶層(即QT界面設(shè)計層),該函數(shù)流程圖請參看附圖5,包括下述步驟
(1)獲取應(yīng)用的activeWindow窗口;
(2)判斷TouchPoint容器是否有數(shù)據(jù),如果沒有,則結(jié)束;如果有,則
(3)從touchpoint容器中獲取point值;
(4)根據(jù)point值的情況選擇發(fā)送內(nèi)容;
(5)通過激活窗口發(fā)送touch消息至⑶I用戶層。 上面流程為多點手勢實現(xiàn),單點屏幕滑動手勢實現(xiàn)需要采用默認的鼠標消息,改進后的鼠標消息流程請參看附圖6,具體步驟如下
(1)、獲取觸摸屏點;
(2)、判斷是否按下,如果沒有,則默認取消發(fā)送;如果是,則
(3)、將point點壓入容器;
(4)、通過容器XY坐標點計算是否為手勢操作;
(5)、判斷是否有手勢,如果沒有,則默認取消發(fā)送;如果是,則
(6)、發(fā)送定義的手勢消息;
(7)結(jié)束。通過上面修改開源代碼QT圖形開發(fā)平臺之后,就可以通過用戶開發(fā)出多點(最多10點操作)觸摸操作界面的用戶程序,如圖片的放大可以通過上面自定義的TouchBegin(表示按下)、自定義TouchUpdate (表示兩點或兩點以上在移動具體哪個手指往哪個方向移動需要通過坐標、slot槽位值來區(qū)分)、自定義TouchEnd (表示手指已經(jīng)抬起)等來實現(xiàn),關(guān)于屏幕滑動手勢可以通過自定義手勢消息會直接發(fā)送到用戶界面的Event成員函數(shù),實現(xiàn)非常方便。
權(quán)利要求
1.一種使用QT圖形開發(fā)平臺在ARM下的多點觸摸實現(xiàn)方法,其特征是所述的方法包括下述步驟 (1)移植觸摸屏接口層tslib模塊; (2)改進tslib模塊實現(xiàn)多點上報; (3)改進QT圖形開發(fā)平臺定義多點觸摸。
2.根據(jù)權(quán)利要求I所述的使用QT圖形開發(fā)平臺在ARM下的多點觸摸實現(xiàn)方法,其特征是所述的移植觸摸屏接口層tslib模塊包括下述步驟 (1)先安裝ARM的交叉編譯器,然后配置tslib模塊的編譯為ARM的編譯,并配置安裝的路徑; (2)第二步編譯和安裝tslib模塊,編譯之后的動態(tài)庫、校正程序、測試程序、ts. conf文件會安裝在第一步配置的路徑下; (3)第三步配置tslib的環(huán)境變量包括圖形framebuffer設(shè)備、觸摸操作設(shè)備、TSLIB配置文件、tslib校正文件; (4)第四步為QT移植配置時應(yīng)與tslib庫關(guān)聯(lián)一起。
3.根據(jù)權(quán)利要求I所述的使用QT圖形開發(fā)平臺在ARM下的多點觸摸實現(xiàn)方法,其特征是所述的多點上報的流程包括下述步驟 (1)上報單點X坐標值; (2)上報單點Y坐標值; (3)上報壓力值; (4)值0表不第一點; (5)上報第一點的X坐標值; (6)上報第一點的Y坐標值; (7)上報第一點的壓力值; (8 ) 判斷是否與SYN_REPORT相同; (9)值I表示第二點; (10)上報第一點的X坐標值; (11)上報第一點的Y坐標值; (12)上報第一點的壓力值; (13)依次重復(fù)步驟4-8; (14)判斷是否與SYN_REPORT相同; (15)所有點抬起上報。
4.根據(jù)權(quán)利要求I所述的使用QT圖形開發(fā)平臺在ARM下的多點觸摸實現(xiàn)方法,其特征是所述的改進QT圖形開發(fā)平臺包括下述步驟 (1)、通過tslib接口獲取采樣點; (2)、判斷是否有采樣點,如果沒有則結(jié)束;如果有,則 (3)、初始化采樣點坐標; (4)、判斷是否為多點觸摸(本實施例中,判斷Slot是否大于0),如果不是則將一點時間坐標、按下狀態(tài)發(fā)送至上層;如果是,則 (5)、通過采樣點X、Y壓力值初始化TouchPoint;(6)、通過壓力值判斷是否有按下,如果沒有,則State狀態(tài)置為TouchPointRelease;如果有,則 (7)判斷是否剛按下,如果是,則State狀態(tài)置為TouchPointPressed,然后轉(zhuǎn)至步驟9;如果不是,則 (8)判斷跟上次坐標點是否未移動,如果是,則State狀態(tài)置為TouchPointStationary,然后轉(zhuǎn)至步驟9 ;如果不是則State狀態(tài)置為TouchPointMoved,然后轉(zhuǎn)至步驟9 ; (9)通過函數(shù)qt_translateRawTouchEvent 發(fā)送 touchpoint 至上層。
5.根據(jù)權(quán)利要求4所述的使用QT圖形開發(fā)平臺在ARM下的多點觸摸實現(xiàn)方法,其特征是所述的函數(shù)qt_translateRawTouchEvent發(fā)送touchpoint至上層包括下述步驟 (1)獲取應(yīng)用的activeWindow窗口; (2)判斷TouchPoint容器是否有數(shù)據(jù),如果沒有,則結(jié)束;如果有,則 (3)從touchpoint容器中獲取point值; (4)根據(jù)point值的情況選擇發(fā)送內(nèi)容; (5)通過激活窗口發(fā)送touch消息至⑶I用戶層。
全文摘要
本發(fā)明公開一種使用QT圖形開發(fā)平臺在ARM下的多點觸摸實現(xiàn)方法,使用QT圖形開發(fā)平臺在ARM下的多點觸摸實現(xiàn)方法,本發(fā)明修改QT開源代碼編譯,使其在QT上GUI開發(fā)能夠支持多點。本發(fā)明能夠?qū)崿F(xiàn)在使用QT圖形開發(fā)平臺在ARM下實現(xiàn)多點觸摸的用戶操作界面,可使用戶更加方便、簡單、友好的用戶界面,通過多點觸摸可以很靈活的實現(xiàn)圖片動態(tài)放大、圖片移動等多點手勢操作。
文檔編號G06F9/44GK102929429SQ20121038634
公開日2013年2月13日 申請日期2012年10月12日 優(yōu)先權(quán)日2012年10月12日
發(fā)明者楊紹華, 廖海 申請人:深圳銳取信息技術(shù)股份有限公司