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