Qt/E中的键盘设备管理
http://www.cnblogs.com/baizx/
鍵盤(pán)設(shè)備在Qt中表現(xiàn)為QWSKeyboardHandler的一個(gè)實(shí)例,為了支持各種各樣的鍵盤(pán)設(shè)備,Qt提供了QWSKeyboardHandler接口,各種鍵盤(pán)設(shè)備只需要在收到底層操作系統(tǒng)鍵盤(pán)設(shè)備的按鍵以后調(diào)用QWSKeyboardHandler的processKeyEvent函數(shù)即可將鍵盤(pán)信息傳遞到Qt系統(tǒng)中,然后由QWSServer分發(fā)給適當(dāng)?shù)目蛻舳恕?/span>QWSKeyboardHandler最重要的函數(shù)就是提供了processKeyEvent,方便其子類(lèi)調(diào)用該函數(shù)將鍵碼傳遞到Qt系統(tǒng)中。列出了Qt預(yù)置的所有的鍵盤(pán)驅(qū)動(dòng),詳細(xì)信息可以參考Qt官方幫助文檔。
圖2- 6 QWSKeyboardHandler繼承關(guān)系圖
如果要實(shí)現(xiàn)自定義的鍵盤(pán)設(shè)備,那么可以通過(guò)繼承QWSKeyBoardHandler來(lái)實(shí)現(xiàn),主要工作分為兩部分,一部分是設(shè)備初始化,另外一部分工作就是等待用戶按鍵,并將信息傳遞到qt系統(tǒng)。
具體流程可以參照下圖:
?????????????????????????????? ? ? ?
底層鍵盤(pán)設(shè)備已經(jīng)由驅(qū)動(dòng)負(fù)責(zé)了,這里只需打開(kāi)設(shè)備,并監(jiān)聽(tīng)設(shè)備描述符,將可讀信號(hào)關(guān)聯(lián)到自定義的slot上,當(dāng)有按鍵數(shù)據(jù)可讀取時(shí)直接進(jìn)行讀取。
notifier = new QSocketNotifier(kbdFD, QSocketNotifier::Read, this);
connect(notifier, SIGNAL(activated(int)),this,SLOT(readKeyboardData()));
另外一部分工作就是等待用戶按鍵,并傳遞到qt系統(tǒng)內(nèi)部。見(jiàn)下圖
???????????????????????????????????????????????????????????????????????????
從底層鍵盤(pán)設(shè)備讀取出來(lái)的數(shù)據(jù)格式可能各種各樣,如果符合Linux標(biāo)準(zhǔn)輸入輸出接口,那么就不用做任何改動(dòng), 但是經(jīng)常我們會(huì)有一些特殊的按鍵設(shè)置,必須進(jìn)行一定的轉(zhuǎn)換,這些工作就要在此步完成。然后由
void QWSServer::processKeyEvent ( int?unicode, int?keycode,??modifiers, bool?isPress, bool?autoRepeat?)???[static]
這是一個(gè)靜態(tài)函數(shù),因此可以直接使用,這些參數(shù)中最重要的是keycode,要將自定義的按鍵值轉(zhuǎn)換為Qt內(nèi)部的鍵碼,比如:Qt::Key_Delete等等,modifiers是用于組合按鍵,像ctrl,shift的處理。第一個(gè)參數(shù)unicode一般沒(méi)用, 可以忽略。
Qt中鍵盤(pán)驅(qū)動(dòng)是通過(guò)環(huán)境變量QWS_KEYBOARD來(lái)確定,如果沒(méi)有則使用默認(rèn)的,如果有則使用用戶指定的,使用方法和Qt中的鼠標(biāo)設(shè)備一樣,可以參考
http://www.cnblogs.com/baizx/archive/2010/04/08/1707790.html
轉(zhuǎn)載于:https://www.cnblogs.com/baizx/archive/2010/07/20/1781362.html
總結(jié)
以上是生活随笔為你收集整理的Qt/E中的键盘设备管理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 扩展Visual Studio 2010
- 下一篇: 办公软件学习