轉載請注明出處:
http://www.cnblogs.com/baizx/
鍵盤裝置在Qt中表現為
QWSKeyboardHandler 的一個執行個體,為了支援各種各樣的鍵盤裝置,Qt提供了 接口,各種鍵盤裝置隻需要在收到底層作業系統鍵盤裝置的按鍵以後調用QWSKeyboardHandler的 processKeyEvent 函數即可将鍵盤資訊傳遞到Qt系統中,然後由QWSServer分發給适當的用戶端。QWSKeyboardHandler最重要的函數就是提供了processKeyEvent,友善其子類調用該函數将鍵碼傳遞到Qt系統中。列出了Qt預置的所有的鍵盤驅動,詳細資訊可以參考Qt官方幫助文檔。
Qt/E中的鍵盤裝置管理 圖2- 6 QWSKeyboardHandler繼承關系圖 如果要實作自定義的鍵盤裝置,那麼可以通過繼承QWSKeyBoardHandler來實作,主要工作分為兩部分,一部分是裝置初始化,另外一部分工作就是等待使用者按鍵,并将資訊傳遞到qt系統。 具體流程可以參照下圖:
Qt/E中的鍵盤裝置管理 底層鍵盤裝置已經由驅動負責了,這裡隻需打開裝置,并監聽裝置描述符,将可讀信号關聯到自定義的slot上,當有按鍵資料可讀取時直接進行讀取。 notifier =
new QSocketNotifier(kbdFD, QSocketNotifier::Read, this);
connect(notifier,
SIGNAL(activated(int)),this,SLOT(readKeyboardData()));
另外一部分工作就是等待使用者按鍵,并傳遞到qt系統内部。見下圖
Qt/E中的鍵盤裝置管理 從底層鍵盤裝置讀取出來的資料格式可能各種各樣,如果符合Linux标準輸入輸出接口,那麼就不用做任何改動, 但是經常我們會有一些特殊的按鍵設定,必須進行一定的轉換,這些工作就要在此步完成。然後由 這是一個靜态函數,是以可以直接使用,這些參數中最重要的是keycode,要将自定義的按鍵值轉換為Qt内部的鍵碼,比如:Qt::Key_Delete等等,modifiers是用于組合按鍵,像ctrl,shift的處理。第一個參數unicode一般沒用, 可以忽略。 Qt中鍵盤驅動是通過環境變量QWS_KEYBOARD來确定,如果沒有則使用預設的,如果有則使用使用者指定的,使用方法和Qt中的滑鼠裝置一樣,可以參考 http://www.cnblogs.com/baizx/archive/2010/04/08/1707790.html