mac上使用qt,進行輸入法的開發

2021-06-05 20:27:41 字數 3594 閱讀 7752

最近一直在忙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 自己自帶的輸入法 一 使用者介面 並沒有所謂的介面,只是乙個小巧的輸入法,本人覺得簡單實用,沒有其他輸入法花裡胡哨的設定,個人中心,工具箱等根本用不到的功能。總而言之,簡單實用!二 記住使用者的選擇 可以記住之前打過的詞語,姓名,地名之類的。三 短期刺激和長期的好處...