日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

qt之键盘的设计及QlineEdit内容读取

發布時間:2025/3/15 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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讀取:

輸入:?
可以讀取當前框中所輸入的文字

QString mString = ui->lineEdit->text(); QMessageBox::about(this, "About", mString);
  • 1
  • 2
  • 3

輸出:?
這樣可以設置lineEdit的當前顯示文字

ui->lineEdit->setText(L"About");
  • 1
  • 2

焦距設置:?
設置當前lineEdit不可獲得焦距,即不可被選中輸入

ui->lineEdit_3->setFocusPolicy(Qt::NoFocus);
  • 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内容读取的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。