新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于Murphypinyin的嵌入式鍵盤設(shè)計(jì)

基于Murphypinyin的嵌入式鍵盤設(shè)計(jì)

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

  2.2 Qt/Embedded的鍵盤映射

本文引用地址:http://m.butianyuan.cn/article/265782.htm

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

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

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

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

  在讀鍵盤函數(shù)ReadKeyboardData()中,調(diào)用矩陣鍵盤驅(qū)動(dòng)程序的讀函數(shù)Read()來獲取按鍵值。為了使得按鍵值能夠傳送給應(yīng)用程序,要使用 QWSKeyboardHandler類的成員函數(shù)processKeyEvent(int unicode,int keycode,int modifiers,bool isPress,bool autoRepeat),各參數(shù)功能如下:

  ①Unicode:按鍵的Unicode編碼,如數(shù)字1的unicode編碼為1,字母A的unicode編碼為A。如果該項(xiàng)為0,則為功能鍵Shift、Left、Right等;如果該項(xiàng)為0xFFFF,則只傳送鍵值keycode,不打印編碼。

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

 ?、跰odifiers:Qt所支持的鍵盤組合鍵。

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

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

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

  2.3 Murphpinyin拼音輸入法的移植

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

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

  首先考慮的問題是:如何用鍵盤打開Murphypinyin輸入法?這里可以修改Murphypinyin軟件包中的PinyinFrame.cpp文件中的:

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

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

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

  2.4按鍵復(fù)用

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

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

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

  為了使一個(gè)按鍵能夠輸入不同的字符,本系統(tǒng)使用不同的key_ID值來標(biāo)識(shí)各個(gè)字符,這樣,每按一次鍵都是不同的。圖6是對(duì)于按鍵2的復(fù)用過程。根據(jù)不同的key_ID結(jié)合當(dāng)前所處的輸入模式,發(fā)送相應(yīng)的數(shù)字、小寫英文或大寫英文字符。



  3 總 結(jié)

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

linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

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



上一頁 1 2 下一頁

關(guān)鍵詞: Murphypinyin Linux

評(píng)論


相關(guān)推薦

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

關(guān)閉