qt之键盘的设计及QlineEdit内容读取
第一階段----找到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
運行效果圖片:
中文輸入
英文輸入
QLineEdit讀取:
輸入:?
可以讀取當前框中所輸入的文字
- 1
- 2
- 3
輸出:?
這樣可以設置lineEdit的當前顯示文字
- 1
- 2
焦距設置:?
設置當前lineEdit不可獲得焦距,即不可被選中輸入
- 1
- 2
連接信號與槽使得回車相當于確認
connect(ui->lineEdit, SIGNAL(returnPressed()), this, SLOT(calSlot()));- 1
- 2
常用的轉換函數
int num_1 = ui->lineEdit->text().toInt(); //把QString轉換為int QString::number(num_1, base); //把int 轉換為base進制的QString總結
以上是生活随笔為你收集整理的qt之键盘的设计及QlineEdit内容读取的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ubuntu14.04,安装JDK1.8
- 下一篇: 安装Windows10,Ubuntu双系