成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

淺析 Qt Embedded 鍵盤驅動分析 (下)

移動開發(fā)
我們都知道Qt-x11借助XServer提供對硬件外設的接口,不需要直接和driver打交道,Qt Embedded則顛覆了這個傳統(tǒng)并且摒棄了對XServer的依賴, 所以免不了要有和硬件driver交互的時候。

Qt Embedded 鍵盤驅動分析是我們所要介紹的內容。我們接著上文繼續(xù)介紹, 淺析 Qt Embedded 鍵盤驅動分析 (上)  上文我們介紹了下面這兩個代碼文件中載入鍵盤驅動插件的流程。

讀取環(huán)境變量,載入相應的鍵盤驅動插件:src/gui/embedded/qwindowsystem_qws.cpp

創(chuàng)建鍵盤處理函數(shù)類的實例:src/gui/embedded/qkbddriverfactory_qws.cpp

但光說流程沒有辦法解釋大多數(shù)人內心的疑問, 鍵盤驅動插件究竟是怎么工作的呢? 怎么才能讓它來響應板子上的按鍵消息呢?這些疑問需要分析一個完整的鍵盤處理插件才能回答, 下面我們就來看看最基本的pc101這個鍵盤插件是怎么實現(xiàn)的吧。首先,說到插件, 先要實現(xiàn)一個插件的框架, 這個框架的代碼要遵循Qt中的插件規(guī)范,還要符合鍵盤驅動插件的特點。 聽起來很難? 呵呵,其實非常簡單, 只有兩個函數(shù)需要自己實現(xiàn)。

涉及的代碼:

鍵盤plugin框架:src/plugins/kbddrivers/usb/main.cpp

鍵盤driver handler的實現(xiàn):src/gui/embedded/qkbdusb_qws.cpp

實現(xiàn)插件框架

main.cpp

  1. class QUsbKbdDriver : public QKbdDriverPlugin  
  2. {public:  
  3. QUsbKbdDriver();  
  4. QStringList keys() const;  
  5.  QWSKeyboardHandler* create(const QString &driver, const QString &device);  
  6. }; 

需要實現(xiàn)的函數(shù)已經用藍色字體標示出來了。 通過閱讀main.cpp的代碼我們發(fā)現(xiàn),這兩個函數(shù)實在是太簡單了, 簡直不值一提, 都是最“標準”的實現(xiàn)方式,完全不用動腦子。 keys就是返回當前driver插件的鍵值, 只要不和其他插件鍵值沖突就行。 create返回你實現(xiàn)的QWSKeyboardHandler派生類的實例。

實現(xiàn)鍵盤處理實例

  1. qkbdusb_qws.h  
  2. class QWSUsbKeyboardHandler : public QWSPC101KeyboardHandler  
  3. {  
  4. public:  
  5. QWSUsbKeyboardHandler(const QString&);  
  6. virtual ~QWSUsbKeyboardHandler();  
  7. private:  
  8. QWSUsbKbPrivate *d;  
  9. }; 

從代碼上來看, 這個Handler的類除了必須從QWSKeyboardHandler基類來派生之外,沒有什么特別的要求。 但它對應的cpp文件其實實現(xiàn)了不少的功能, 篇幅關系不能把整個代碼貼出來,特此總結一個一般的keyboard driver plugin流程,如下:

1、打開鍵盤設備并初始化 — 一般情況下是調用open

2、監(jiān)控鍵盤事件 — 一般用QSocketNotifier去監(jiān)控鍵盤fd

3、發(fā)生鍵盤事件時讀取鍵盤事件信息, 如按下、抬起等 — 一般是調用read

4、獲得鍵盤事件信息后, 將鍵值、按下等信息翻譯成Qt內部鍵盤事件的格式,并通過調用processKeyEvent將事件分發(fā)出去。

5、析構函數(shù)別忘了關閉設備

90%以上的Keyboard Driver Handler會遵循這樣的流程去處理鍵盤, 如果我們要寫自己的插件,肯定這樣寫也沒錯。具體的代碼可能還需要看看例子,請大家閱讀qkbdusb_qws.cpp然后回答下面幾個問題,以驗證自己對這部分是否弄清楚了:

打開設備是不是一定要調用open函數(shù)? 這是由什么決定的?

A: 不一定, 但多數(shù)字符設備驅動會提供open方法打開設備。 當然是由設備驅動的實現(xiàn)來決定的。

怎樣用QSocketNotifier去監(jiān)控fd?

A: 文檔里找答案, 代碼里找例子。 關于SocketNotifier我有一點補充: 有人問它的SN在鍵盤按下時不會發(fā)出activated信號, 可能是什么原因? 這個問題我所知道的有兩種可能性, 一是設備名字搞錯了, 打開的不是鍵盤設備; 二是設備驅動實現(xiàn)的有些問題導致SN不能正常工作, 記得以前在哪里看到過SN依賴底層提供的poll函數(shù)工作, 如果設備驅動沒有實現(xiàn)該函數(shù)或者實現(xiàn)的不對就會造成SN工作不正常了, 出現(xiàn)問題的話嘗試從這個角度去debug看看。

讀取鍵盤事件一定用read函數(shù)嗎? 還有沒有其他可能?
A: 不一定, 見過用ioctl的, 好像還比較常見。 取決于鍵盤驅動的實現(xiàn)。

該如何定義讀取鍵盤事件使用的數(shù)據結構呢?
A: of course要看鍵盤的驅動。

這些問題都是文章中沒有講到的問題,但相信通過大家的聰明才智一定可以解答。

小結:淺析 Qt Embedded 鍵盤驅動分析 (下)的內容介紹完了,希望本文能幫你解決問題。

責任編輯:zhaolei 來源: 互聯(lián)網
相關推薦

2011-06-29 15:14:22

Qt Embedded 鍵盤

2010-01-13 14:18:52

Windows Emb

2011-06-13 13:35:06

Qt Embedded QT

2011-06-20 14:27:57

Qt Embedded

2011-06-10 13:21:00

Qt 網絡

2011-06-30 10:59:43

2011-06-10 11:24:08

Qt Quick Designer

2011-06-20 15:13:08

Qt 對象模型

2011-06-21 13:52:18

Qt 界面

2011-06-13 11:07:22

QT 移植

2011-06-09 18:05:00

QT MySql

2011-07-05 13:32:45

QT Mysql 驅動

2009-07-17 13:49:57

Windows Emb

2011-06-28 13:47:37

Embedded QT ARM

2009-06-19 15:08:23

JDBC驅動

2009-06-19 17:14:47

JDBC驅動設置

2011-06-30 13:49:00

Qt 鍵盤 聚焦

2011-06-15 18:00:26

2011-06-29 09:20:41

Qt Embedded Qtopia

2021-09-08 09:22:23

領域驅動設計
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 99国产精品一区二区三区 | 久久久久国产一级毛片高清网站 | 欧美激情视频一区二区三区在线播放 | 午夜视频一区 | 91精品国产一区 | 国产一二区免费视频 | 亚洲成人久久久 | 欧美日韩精品一区二区 | 欧美一级欧美一级在线播放 | 成人精品国产免费网站 | 午夜影院操| 99热热99 | 精品三级在线观看 | 欧美a在线看 | julia中文字幕久久一区二区 | 国产在线一区二区三区 | 中文字幕国产精品视频 | 黄色片a级| 亚洲免费视频播放 | 久久国产精品99久久久久久丝袜 | 91天堂| 日本成人在线免费视频 | 性高湖久久久久久久久 | 亚洲看片网站 | 欧美精品一区二区三区视频 | 欧美精品一区二区三区在线播放 | 国产精品精品视频一区二区三区 | 精品免费av | 精品国产伦一区二区三区观看说明 | 亚洲美女网站 | 狠狠色香婷婷久久亚洲精品 | 国产精品久久久爽爽爽麻豆色哟哟 | 国产二区av | av天天看 | 色综合久久久久 | 亚洲国产一区二区三区四区 | www操操 | 在线免费观看日本 | 国产精品久久亚洲7777 | 欧美激情一区二区三级高清视频 | 日韩精品在线一区 |