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