<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 嵌入式Linux中基于Qt/Embedded的鍵盤接口設(shè)計

          嵌入式Linux中基于Qt/Embedded的鍵盤接口設(shè)計

          作者: 時間:2011-01-13 來源:網(wǎng)絡(luò) 收藏


          3 Qt/Embedded輸入策略
          3.1 Qt/Embedded架構(gòu)簡介
          Qt/Embedded Linux應(yīng)用程序需要一個正在運行著的服務(wù)器應(yīng)用或者是本身就是一個服務(wù)器應(yīng)用程序。任何一個Qt/Embedded Linux應(yīng)用程序都可以扮演服務(wù)器的角色。當(dāng)多于一個應(yīng)用程序運行的時候,應(yīng)用程序作為客戶端與服務(wù)器程序相連接。
          服務(wù)器進(jìn)程和客戶端進(jìn)程有不同的分工:服務(wù)器進(jìn)程管理著鼠標(biāo)指針的處理、字符的輸入和屏幕的輸出。另外服務(wù)器還控制著屏幕光標(biāo)的輸出和屏幕保護(hù)程序??蛻舳诉M(jìn)程完成所有應(yīng)用程序的具體操作。一個QWSServer類的實例代表一個服務(wù)器應(yīng)用,一個QWSClient類的實例代表著一個客戶端應(yīng)用。每一方面都有一些類完成各種操作。
          所有系統(tǒng)產(chǎn)生的事件包括事件和鼠標(biāo)事件都被傳遞到服務(wù)器應(yīng)用中,然后服務(wù)器將這些事件分發(fā)到客戶端應(yīng)用中。
          3.2 客戶端/服務(wù)器的通信
          如圖3所示,正在運行著的程序通過增加和刪除窗口不斷地改變屏幕的顯示。服務(wù)器在對應(yīng)的QWSWindow對象中維護(hù)著每一個頂層窗口的信息。每當(dāng)服務(wù)器接收到一個事件時,它都會查詢它的頂層窗口列表找到包含該事件位置的窗口。每一個窗口都有一個創(chuàng)建它們的客戶端應(yīng)用的ID,將這個ID返回給服務(wù)器。最后服務(wù)器將這個事件封裝成一個QWSEvent類的實例,傳遞給相應(yīng)的客戶端。

          c.JPG
          另外還可以通過QWSServer::KeyboardFilter類實現(xiàn)按鍵事件的全局的底層過濾器。這種方法可以實現(xiàn)電源管理中的一鍵掛起,而不用在所有的應(yīng)用程序中都對這個按鍵事件進(jìn)行過濾。
          如圖4所示,服務(wù)器通過UNIX域套接字與客戶端進(jìn)行通信??蛻舳藦姆?wù)器接收事件,這些事件通過重新實現(xiàn)QApplication的qwsEvent-Filter()函數(shù)可以被直接檢索訪問。

          d.JPG
          客戶端相互之間(和服務(wù)器)通過QCopChannel類通信。QCOP用于在多個通道間傳送信息,是一個多對多的通信協(xié)議。每個通道用名字作為識別 ID,任何一個想要和它通信的通道都能監(jiān)聽它。QCOP協(xié)議既允許在相同的地址空間內(nèi)的客戶端之間進(jìn)行通信,也允許在不同的進(jìn)程的客戶端之間進(jìn)行通信。
          3.3 字符輸入層
          如圖5所示,當(dāng)一個服務(wù)器應(yīng)用程序開始運行時使用Qt的插件系統(tǒng)加載驅(qū)動,驅(qū)動是一個QWSKeyboardHandler類的實例。

          e.JPG
          鍵盤驅(qū)動從設(shè)備接收鍵盤事件,并把事件封裝成一個QWSEvent類的實例,然后把這個類傳送給服務(wù)器。定制鍵盤可以通過子類QWSKeybo- ardHandler類創(chuàng)建一個鍵盤驅(qū)動插件來實現(xiàn)。默認(rèn)的QKbdDriverFactory類將自動檢測到這個插件然后把驅(qū)動加載到正在運行的服務(wù)器應(yīng)用中。

          4 鍵盤驅(qū)動插件的實現(xiàn)
          本文通過Qt的插件系統(tǒng)實現(xiàn)了矩陣鍵盤的驅(qū)動。插件是一種遵循一定規(guī)范的應(yīng)用程序編寫出來的程序。在現(xiàn)代計算機(jī)語言中,應(yīng)用環(huán)境復(fù)雜多變,常常要面臨著適應(yīng)這樣那樣的未知需求的挑戰(zhàn),為了使程序設(shè)計語言具有良好的可擴(kuò)展性,使之能夠適應(yīng)復(fù)雜的應(yīng)用環(huán)境,同時也出于降低設(shè)計復(fù)雜性的考慮,采用插件機(jī)制是一個很不錯的方法。通過采用插件系統(tǒng),把擴(kuò)展功能從框架中剝離出來,可以降低框架的復(fù)雜度,讓框架更容易實現(xiàn)。擴(kuò)展功能與框架之間以一種松耦合的方式集成,允許在保持不變的情況下,實現(xiàn)彼此的獨立變化。
          Qt提供了兩種插件:一種是高層的插件,用來擴(kuò)展Qt自身,如自定義數(shù)據(jù)庫驅(qū)動、圖像格式、文本編解碼器、自定義風(fēng)格等;一種是底層的插件,用來擴(kuò)展Qt應(yīng)用程序。
          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)


          關(guān)鍵詞: 鍵盤 接口 嵌入式

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();