嵌入式QT软键盘
最近搞了一個組織細胞脫水機項目,當然,對于國內(nèi)的項目都是仿來仿去的,我們也不例外,開啟被仿機器后,第一個看到的界面就是用戶登錄界面,需要輸入中文,作為一個程序員,我的第一反應就是我需要采用什么用的框架來做這個界面,方向是多方面的,肯定會選擇自己熟悉的一個,自然而然,我選擇了QT來做界面,但是QT并沒有像安卓,IOS,C#等支持得那么完美,畢竟做的人不是那么多,所以相對不是那么完美。我們沒有鼠標鍵盤這樣的外設,所有的用戶交互都是通過觸摸顯示屏。這里碰到的第一個問題就是:QT軟鍵盤制作。下面進入正題,我是怎么解決這個問題的。
第一階段----找到syszuxpinyin源碼
與大部分人一樣,碰到一個問題不會解決,先問一下百度大神怎么看,網(wǎng)上搜QT軟鍵盤,有各種各樣的解決方法,有些我也下載運行了,不是很好用,有些還需要錢,對于要錢的,可以理解,但是我覺得沒必要。最后我選擇了一個非常接近的嵌入式QT軟鍵盤思路,syszuxpinyin點擊打開鏈接,將源碼下載后,按照指定的方法移植,在arm板子上運行,發(fā)現(xiàn)有兩個問題;
第一:QLineEdit中的內(nèi)容總是append在后面;第二:不能重復點擊某個控件;
第二階段----修改syszuxpinyin源碼
帶著前面兩個問題,我又百度,找到了另外一個博客點擊打開鏈接,按照其中一個的方法修改了,但是發(fā)現(xiàn)又有一個問題,只要點擊軟鍵盤返回按鈕,程序就死在那里了,最終經(jīng)過排查,程序問題出在一個語句current_focus_widget = QApplication::focusWidget();后來和群里的朋友聊聊天才知道,在嵌入式QT版本里,用這樣的方法獲取焦點是有bug的。
第三階段----詳細分析syszuxpinyin源碼
既然沒有找到完全匹配的方法,而且又研究了這么久的syszuxpinyin后,決定將syszuxpinyin的源代碼吃透,看有沒有更多的收獲
做了注釋的syszuxpinyin代碼如下地址:http://pan.baidu.com/s/1i56lUiL
分析syszupinyin架構(gòu):
syszupinyin的架構(gòu)由兩部分組成
第一部分:軟鍵盤界面,獲取用戶輸入的字符串,來匹配字庫中的漢字或者顯示英文,顯示在QLineEdit中,點擊返回的時候,將漢字或英文發(fā)送出去。
第二部分:QWSInputMethod的子類
第二部分中,由于界面焦點獲取的問題即QApplication::focusWidget()出現(xiàn)bug,自動獲取焦點失敗。那么既然獲取焦點失敗,那么控件成為焦點的時候,可以自己把自己說出來,轉(zhuǎn)換成編程方法就是重寫控件的mousePressEvent方法。
第四階段----實現(xiàn)嵌入式QT軟鍵盤
根據(jù)syszuxpinyin軟鍵盤界面代碼和重寫輸入控件的mousePressEvent方法來實現(xiàn)嵌入式QT軟鍵盤,其實不只是嵌入式版本可以使用,PC機版本也可以使用。
思路:
1 重寫輸入控件的mousePressEvent方法,在mousePressEvent方法中發(fā)射信號,并且將字符串發(fā)送出去,主窗口接收到信號后,打開相應的槽函數(shù),在槽函數(shù)中打開軟鍵盤界面,并且將信號發(fā)送過來的字符串顯示在軟鍵盤界面中。
2 打開軟鍵盤后,可以在界面上可以選擇中英文輸入法,如果是英文輸入法,則直接顯示出來,如果是中文輸入法,則根據(jù)輸入的英文字符來匹配字庫中的字段,然后顯示出來
3 點擊軟鍵盤返回按鍵,則發(fā)送信號,將字符串(英文或中文)發(fā)送給主窗口的輸入組件并顯示。
如果感覺有幫助到,麻煩點個贊!!!
源碼地址下載:http://pan.baidu.com/s/1nvcrBfj
運行效果圖片:
中文輸入
英文輸入
以上是我的QT軟鍵盤思路,雖然界面做得不好看,但是功能已經(jīng)出來了,而且界面也可以自己美化,高手求指教!!!
總結(jié)
- 上一篇: 把数字金额转换成中文大写数字
- 下一篇: CAP理论总结