Qt/C++中英輸入法/嵌入式輸入法/小數字面板/簡繁切換/特殊字符/支持Qt456

一、前言

在嵌入式板子上由於沒有系統層面的輸入法支持,所以都繞不開一個問題,那就是在需要輸入的UI軟件中,必須提供一個輸入法來進行輸入,大概從Qt5.7開始官方提供了輸入法的源碼,作爲插件的形式加入到Qt中,這裏需要特別提示的是,該源碼是gpl的,商業應用對這個比較不感冒,可能更願意自己基於Qt來實現一個。用純Qt寫輸入法,如果不涉及到中文輸入,那還是非常簡單的,只需要將按鈕上的字符用鍵盤事件發給焦點的控件即可。如果需要中文輸入,最簡單的做法是通過查詢字庫數據庫來獲取當前拼音對應的漢字,然後模擬鍵盤事件發送給焦點控件,好處是代碼簡單思路簡單,缺點是性能堪憂,字庫體積大,查詢效率低,需要全拼才能找到合適的詞語。複雜點的做法就是用谷歌開源的輸入法引擎,查閱Qt自己的輸入法源碼,也是用的那個引擎,new出類,然後調用裏面的函數接口,會返回對應的漢字,性能非常好。

谷歌開源的輸入法引擎是標準的C++寫的,所以可以非常方便的支持Qt4到Qt6,就不會侷限於只能Qt5.7以後,輸入法面板自己編寫自己控制,自由度高,同時還可以加入簡體繁體切換,特殊字符面板切換。其實可以複用很多按鈕,比如在特殊字符這塊,特殊字符往往一個面板不夠放,可能要至少3個面板才能涵蓋大部分的特殊字符,所有專門放了個特殊字符的面板按鈕集合,通過翻頁切換特殊字符,將對應的特殊字符文本設置到對應的按鈕上,按鈕單擊後,識別按鈕上的文本,然後再模擬鍵盤事件發送給焦點的控件即可。根據此思路其實可以拓展成多國語言輸入法,根據大致的觀察,多國語言基本上就是一些類似特殊字符的文本,將那些文本作爲數據插入到焦點控件即可。

二、功能特點

  1. 純QWidget編寫,原創輸入法機制,沒有任何第三方動態庫的依賴。
  2. 支持各種Qt版本,包括Qt4、Qt5、Qt6及後續版本。
  3. 支持各種編譯器,包括mingw、msvc、gcc、clang、wasm等。
  4. 支持各種目標平臺,包括windows、linux、macos、android、嵌入式linux等。
  5. 支持任意控件輸入,包括文本框、微調框、可編輯下拉框、表格行等,以及網頁中的輸入控件。
  6. 支持中文、英文、數字、繁體、特殊字符、字母大小寫等輸入,可以自由切換。
  7. 無需更改原有項目代碼,不用任何額外代碼,自動識別需要輸入的控件,彈出輸入法面板,不需要輸入法代碼寫得到處都是。
  8. 使用極爲方便,通過源碼集成到對應項目,源碼是一個pri組件,只要在項目的pro文件引入即可。
  9. 接口極其豐富,在衆多輸入應用場景中不斷迭代完善至今。
  10. 界面清晰簡潔,UI美觀友好,高仿IOS輸入法,非常適合觸摸設備。
  11. 頂部單行文字面板和彈出多行多列文字面板選詞,支持滑動選詞。
  12. 具有詞彙記憶功能,之前選中過的詞語放到候選詞最前面。
  13. 具有自由造詞功能,可以直接打開詞彙文件寫入自定義詞組,最高級別顯示。
  14. 造詞支持單個拼音多個漢字,自動調整優先級。
  15. 內置數字小鍵盤,在微調框這種只需要輸入數字的地方,自動彈出數字小鍵盤,更美觀。
  16. 可通過設置弱屬性,控制是彈出全鍵盤的數字面板還是數字小鍵盤。
  17. 可設置回車後自動隱藏輸入法面板還是要執行插入回車換行符。
  18. 可對部分不需要輸入的輸入框設置禁用輸入法。
  19. 多版面字符頁面,可以自行拓展各種字符展示,可用於多語言輸入。
  20. 輸入法面板尺寸自由設置,採用佈局自適應任何分辨率,同時適用於一些小分辨率的設備。
  21. 輸入法面板位置支持控件正下方/正上方、永遠居中、底部拉伸填充等多種方式。
  22. 界面自適應屏幕大小,輸入法彈出位置爲控件底部時,當超過桌面右邊或者底部時,自動調整位置。
  23. 支持Qt程序嵌入的瀏覽器中的網頁中的文本框等控件的輸入。
  24. 可以分別設置面板按鍵字體大小、候選詞字體大小、圖標尺寸、頂部高度等。
  25. 屬性控制數字輸入,例如需要文本框默認彈出的是數字面板,則設置代碼 ui->lineEdit->setProperty("flag", "number")。
  26. 屬性控制大寫輸入,例如需要文本框默認輸入字母永遠大寫,則設置代碼 ui->lineEdit->setProperty("upper", true)。
  27. 自由控制需要顯示輸入法和不需要顯示輸入法,當某些控件不需要彈出輸入法,只需要對應不需要彈出輸入法的控件設置屬性noinput爲真即可。例如ui->lineEdit->setProperty("noinput", true)。
  28. 實現了長按超過500毫秒重複執行按下的鍵的功能。例如長按退格鍵,不斷刪除。
  29. 支持單拼、全拼、模糊拼音輸入,智能分頁算法,可任意翻頁查看漢字詞組。
  30. 默認自帶5種皮膚顏色,可通過代碼設置皮膚樣式,用戶也可用QSS自定義皮膚。
  31. 谷歌內核的輸入法引擎,品質保證,字庫文件1MB,不依賴數據庫,資源佔用低效率極高。支持模糊拼音,比如nh=你好。
  32. 可選windows專有版本,支持外部程序輸入,比如輸入到記事本、QQ聊天窗口等。
  33. 可選硬鍵盤同步輸入版本,外接實體鍵盤,類似搜狗輸入法彈出小的候選詞面板,可以快捷鍵切換輸入法狀態。
  34. 整個輸入法核心代碼行數1000行左右,非常小,不會對程序體積造成負擔。
  35. 代碼結構極爲清晰,註釋詳細,非常容易閱讀和理解,可自行修改和拓展滿足各種需求。

三、代碼使用

  1. 將core_input2019和core_pinyin整個目錄放到你的項目的pro同一級別目錄中。
  2. 在你的主程序的pro文件中加一行 include($$PWD/core_input2019/core_input2019.pri)
  3. 在你的程序的main函數中引入頭文件 #include "core_input2019/frminput2019.h"
  4. 在你的程序的main函數中加幾行代碼。
QApplication a(argc, argv);
frmInput2019::Instance()->hide();
frmInput2019::Instance()->setFontInfo("MicroSoft Yahei", 18, 16);
frmInput2019::Instance()->setFixedSize2(650, 310);
frmInput2019::Instance()->setIconSize(26, 26);
frmInput2019::Instance()->setTopHeight(60);
QWidget w;
w.show();
return a.exec();
  1. 將源碼下的inputfile文件夾下所有文件(即字庫文件)複製到可執行文件同一目錄。
  2. 詳細的輸入法函數接口使用參見main.cpp和frminputtool.cpp以及frmInput2019.h頭文件中的接口,都有詳細註釋說明。

四、效果圖


五、體驗地址

  1. 體驗地址:https://pan.baidu.com/s/1ZxG-oyUKe286LPMPxOrO2A 提取碼:o05q 文件名:bin_input.zip
  2. 國內站點:https://gitee.com/feiyangqingyun
  3. 國際站點:https://github.com/feiyangqingyun
  4. 個人主頁:https://blog.csdn.net/feiyangqingyun
  5. 視頻主頁:https://space.bilibili.com/687803542/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章