<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于Murphypinyin的嵌入式鍵盤(pán)設計

基于Murphypinyin的嵌入式鍵盤(pán)設計

作者: 時(shí)間:2014-11-23 來(lái)源:網(wǎng)絡(luò ) 收藏

  2.2 Qt/Embedded的鍵盤(pán)映射

本文引用地址:http://dyxdggzs.com/article/265782.htm

  Qt/Embedded是Trolltech公司針對采用嵌人式的電子設備開(kāi)發(fā)的綜合應用平臺。Qt/Embedded包含完整的應用層、靈活的用戶(hù)界面、窗口操作系統、應用程序以及開(kāi)發(fā)框架。

  Qt/Embedded 本身提供了對按鍵的支持,它在文件qkeyboard_qws.cpp中提供了一個(gè)QWSKeyboardHandler類(lèi)來(lái)處理按鍵事件。本系統創(chuàng )建了 QWSKeyboardHandler類(lèi)的一個(gè)子類(lèi)QWSKEYMATRIXHandler。在QWSKEYMATRIXHandler類(lèi)的構造函數中,通過(guò)open()函數打開(kāi)矩陣鍵盤(pán)key_matrix,通過(guò)對打開(kāi)的鍵盤(pán)設備創(chuàng )建一個(gè)QscoketNotifer來(lái)監控按鍵設備,通過(guò)信號與槽機制,建立該QscoketNotifer與讀鍵盤(pán)函數ReadKeyboardData()的連接,當key_matrix被激活時(shí),就會(huì )觸發(fā)讀鍵盤(pán)函數 ReadKeyboardData()。代碼如下:

  notifier=new QSocketNotifier(key_matrix,QSock-etNotifier::Read,this);

  connect(notifier,SIGNAL(activated(int)),this,SLOT(ReadKeyboardData()));

  在讀鍵盤(pán)函數ReadKeyboardData()中,調用矩陣鍵盤(pán)驅動(dòng)程序的讀函數Read()來(lái)獲取按鍵值。為了使得按鍵值能夠傳送給應用程序,要使用 QWSKeyboardHandler類(lèi)的成員函數processKeyEvent(int unicode,int keycode,int modifiers,bool isPress,bool autoRepeat),各參數功能如下:

 ?、賃nicode:按鍵的Unicode編碼,如數字1的unicode編碼為1,字母A的unicode編碼為A。如果該項為0,則為功能鍵Shift、Left、Right等;如果該項為0xFFFF,則只傳送鍵值keycode,不打印編碼。

 ?、贙eycode:Qt中使用的按鍵名稱(chēng),如Qt::Key_Backspace、Qt::Key_Enter等。

 ?、跰odifiers:Qt所支持的鍵盤(pán)組合鍵。

 ?、躨sPress:判斷按鍵的狀態(tài)是“按下”還是“彈起”。

 ?、輆utoRepeat:判斷本次事件是有自動(dòng)重復機制產(chǎn)生,還是由一個(gè)現實(shí)中的按鍵產(chǎn)生。

  通過(guò)processKeyEvent()函數可以發(fā)送數字、小寫(xiě)英文、大寫(xiě)英文,但是目前Qt/Embedded上沒(méi)有中文輸入法,不能輸入中文。

  2.3 Murphpinyin拼音輸入法的移植

   是目前為止基于Qt/Embedded的一個(gè)比較好的開(kāi)源中文輸入法,而且帶有軟鍵盤(pán),用戶(hù)可以通過(guò)觸摸屏輸入中文、英文、數字和符號等。對于到Qt/Embedded的移植,網(wǎng)絡(luò )上有很多參考資料,這里不再作介紹。

  但是將 Murphypinyin應用到手持終端上目前還有一個(gè)問(wèn)題:Murphypinyin帶有的軟鍵盤(pán)是標準的PC101鍵盤(pán),按鍵數量很多。在對體積、重量要求很苛刻的手持終端上,觸摸屏本身的尺寸受到嚴重的制約,PC101鍵盤(pán)會(huì )占據觸摸屏的大部分顯示面積;而且單個(gè)按鍵所占面積很小,從而對觸摸屏的定位精度要求很高。然而觸摸屏本身受周?chē)h(huán)境的影響較大,很容易造成定位不準。本系統將矩陣鍵盤(pán)映射到Murphypinyin上,通過(guò)矩陣鍵盤(pán)輸入中文、英文和數字,這樣在手持終端上可以使用普通的LCD,從而降低了系統成本、提高了系統的可靠性。

  首先考慮的問(wèn)題是:如何用鍵盤(pán)打開(kāi)Murphypinyin輸入法?這里可以修改Murphypinyin軟件包中的PinyinFrame.cpp文件中的:

  boot QPinyinFrame::filter(int unicode,int keycode,int modifiers,bool isPress,bool autoRepeat)

  其中:if(!isHidden()&& isPress)語(yǔ)句用來(lái)判斷Murphypinyin輸入法是否已經(jīng)打開(kāi)并且有按鍵按下。如果是,則判斷當前是中文模式、還是英文模式。中文模式則調用 GetKey(unicode,keycode)函數,根據輸入的拼音搜索漢字;英文模式則調用SendKey(unicode,keycode)函數發(fā)送大寫(xiě)或小寫(xiě)英文字母。如果unicode==9&&keycode==Qt::Key_Tab,則進(jìn)行中英文切換。在這里可以添加判斷語(yǔ)句:if(keycode==Qt::Key NumLock)。當NumLock按鍵按下時(shí),調用:QPinyinFrame::sizeHint()和QPinyinFrame::show()兩個(gè)函數來(lái)開(kāi)啟Murphypinyin輸入法界面。如果再次按下NumLock按鍵,則調用QPinyinFrame::hide()來(lái)隱藏輸入法界面。

  用鍵盤(pán)打開(kāi)Murphypinyin輸入法之后,可以通過(guò)鍵盤(pán)發(fā)送拼音字母來(lái)輸入漢字。通過(guò)發(fā)送unicode=9&&keycode==Qt::Key_Tab來(lái)進(jìn)行中英文切換。

  2.4按鍵復用

  由于手持終端設備對自身的體積有嚴格的要求,為了縮小鍵盤(pán)的體積,本系統模仿手機鍵盤(pán)的布局,采用按鍵復用的方式來(lái)縮小鍵盤(pán)大小。將26個(gè)英文字母按字母表順序3個(gè)或4個(gè)一組依次排列在2~9這8個(gè)數字鍵上,并與阿拉伯數字進(jìn)行復用(見(jiàn)圖2)。

  硬件上的簡(jiǎn)化必然導致軟件復雜度的增加。為了使得系統能夠在按下一個(gè)按鍵后自動(dòng)識別是數字、英文大寫(xiě)字母、英文小寫(xiě)還是拼音字母,需要修改 Qt/Embedded中qkeyboard_qws.cpp的QWSKEYMATRIXHandler::ReadKeyboardData()函數。

  當有按鍵按下后,首先需要判斷當前是處于何種模式:數字、拼音、小寫(xiě)英文還是大寫(xiě)英文模式,實(shí)現流程如圖5所示。通過(guò)NumLock按鍵和狀態(tài)標志字 English-Mode來(lái)進(jìn)行數字狀態(tài)和其他幾個(gè)狀態(tài)的切換。通過(guò)Tab按鍵來(lái)進(jìn)行中、英文模式的切換,通過(guò)CapsLock按鍵來(lái)進(jìn)行英文大小寫(xiě)字母的切換。

  為了使一個(gè)按鍵能夠輸入不同的字符,本系統使用不同的key_ID值來(lái)標識各個(gè)字符,這樣,每按一次鍵都是不同的。圖6是對于按鍵2的復用過(guò)程。根據不同的key_ID結合當前所處的輸入模式,發(fā)送相應的數字、小寫(xiě)英文或大寫(xiě)英文字符。



  3 總 結

  本文介紹了基于S3C2440的矩陣鍵盤(pán)的硬件設計方法和軟件的驅動(dòng)開(kāi)發(fā)方法,通過(guò)將Murphpinyin開(kāi)源軟件包與Qt/Embeded自帶輸入法的融合,使用按鍵復用的策略,采用較少的按鍵,構建了一款可輸入數字、中/英文的嵌入式鍵盤(pán),并在S3C2440上實(shí)現。為手持終端提供了一種嵌入式鍵盤(pán)的解決方案。

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)

linux相關(guān)文章:linux教程



上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: Murphypinyin Linux

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>