最近一直在忙mac上的輸入法開發,現在終於告一段落了,分享一下開發時遇到的問題和經驗。
開發語言:
c,c++,object-c
開發工具:
qtcreator 2.4.1
qt sdk 4.8.0
xcode 3.2.6
環境搭建:
參考:開啟qtcreator,建立乙個新工程,build,成功,環境搭建完畢!
qt-creator-mac-opensource-2.4.1.dmg
qt-mac-opensource-4.8.0.dmg
qt-mac-opensource-4.8.0-debug-libs.dmg
輸入法機制:
在xcode的sdk裡搜尋inputmethodkit
也可以找到這個sample。
下面簡單說明一下mac的輸入法機制。
a.實現imkinputcontroller
繼承此類後,可以過載/呼叫輸入法的功能函式,比如送字,提交候選等,具體可以參考inputmethodkit.h(系統檔案,搜尋檢視)
b.實現註冊
//each
input
method
needs
aunique
connection
name.
//note
that
periods
andspaces
arenot
allowed
inthe
connection
name.
constnsstring*kconnectionname=@"numberinput_1_connection";
//let
thisbea
global
soour
controller
delegate
canaccess
iteasily
imkserver*server;
c.重要介面說明
a中說了要呼叫輸入法的功能,需要繼承那個imkinputcontroller類。
.h
#import #import @inte***ce numberinputcontroller : imkinputcontroller
.mm
這個inputtext函式就是攔截當前輸入的內容(比如你按下鍵盤按鍵),來決定是否將指定的字串傳送到當前焦點上。sender是當前焦點的控制項,id型別是objectc裡特有的,可以指向任何型別,但是不等同於void*。
返回no的話,按鍵事件不會發給焦點視窗,true的話就會傳送上去。
-(bool)inputtext:(nsstring*)string client:(id)sender
commitcomposition是將完成的復合結果提交上屏,裡面的insertext實際上是重點函式,這個函式是將指定字串傳送到當前焦點id上。這裡我將hello這個字串傳送到了當前螢幕上。
-(void)commitcomposition:(id)sender
也許你會好奇這個id是怎麼來的,因為inputtext和commitcomposition都是重寫的系統函式,id是系統傳進來的,如果在自己的程式裡怎麼能夠不通過觸發這兩個函式來獲取當前的id呢?我們來看這兩個函式:
/*!
@method
@abstract activates the input method.
*///啟用輸入法,只要將輸入法放在系統目錄,一有焦點切換就會進入這裡
- (void)activateserver:(id)sender
/*!
@method
@abstract deactivate the input method.
*///和activateserver不同,deactivateserver只會在切換到別的輸入法或者在焦點間切換時才會呼叫
- (void)deactivateserver:(id)sender
呵呵,現在是不是知道怎麼做了?沒錯,在active的時候將sender記錄下來,這樣就可以全域性使用啦~~~~
d.修改plist檔案
cfbundleidentifier(com.jt.inputmethod.qtestinput)
是服務的名字,這裡面必須包含inputmethod字元,不然系統不會認定是輸入法服務。
nsmainnibfile(mainmenu)
是nib檔案的名字,注意統一。
lsbackgroundonly(1)
inputmethodconnectionname(numberinput_1_connection)
輸入法機制裡b的那個變數,註冊時使用的名字。要和**中統一。
inputmethodservercontrollerclass
inputmethodserverdelegateclass
目前註冊這兩個類時,這裡面填寫的是類名,目前使用的都是numberinputcontroller這個類。
至於這兩個類都註冊成同乙個class,就是為了將這兩個系統類的方法都在numberinputcontroller中呼叫。他們分別控制著系統輸入法裡相關的一些函式,不明白可以參考inputmethodkitoverview.pdf,實在不理解就pass吧。
tsinputmethodiconfilekey
在設定裡顯示的icon的檔名
cfbundleiconfile
e.打包發布
pkg是mac上一般常見的安裝包檔案,類似setup.exe。
使用qt自帶的工具,macdeployqt,該工具在deverloper/tools/qt目錄下。
執行時這樣:
具體可以-h顯示引數。
打依賴庫:
打dmg
macdeployqt ***/***.pkg –verbose=2 –dmg
會有錯誤,不用管它。
f.除錯
隨意開啟乙個編輯框,然後command+space切換到qinput即可呼出輸入法介面。
程式中通過nslog,qdebug函式列印日誌,除錯程式。
Mac上如何自動切換輸入法
自動切換輸入法 功能 1.自動切換輸入法 支援所有常用輸入法,能夠根據當前正在執行的不同的應用程式,自動切換對應的輸入法,免去人工手動切換 2.設定切換輸入法快捷鍵 可設定快捷鍵,在特定情況下,一步切換到指定切換輸入法。快捷切換,一步到位。一直以來,輸入法切換只能進行上乙個或者下乙個,如果存在多個輸...
解決在MAC上輸入法切換慢的問題
1.常用 2.按鍵 3.拼音 4.高階 自動更新 不啟用 自動切換英文 不啟用 目的是為了讓軟體少幹點活,幹活越多就越慢。1.進入 系統偏好設定 鍵盤 快捷鍵 輸入法 設定如下快捷鍵 勾選 select the previous input source,並設定快捷鍵為 option command...
對自己現在使用的輸入法進行評價
我現在使用的是window 10 自己自帶的輸入法 一 使用者介面 並沒有所謂的介面,只是乙個小巧的輸入法,本人覺得簡單實用,沒有其他輸入法花裡胡哨的設定,個人中心,工具箱等根本用不到的功能。總而言之,簡單實用!二 記住使用者的選擇 可以記住之前打過的詞語,姓名,地名之類的。三 短期刺激和長期的好處...