QtE的輸入法框架必須提供一個QWSInputMethod類的實例, 所以在輸入法中要實現一個QWSInputMethod類的派生類,即子類QWSInputMethod *input; 在此派生類中顯示和操作軟鍵盤widget並完成與輸入法框架的通訊。 QWSServer進程調用(即你的主窗體)QWSServer::setCurrentInputMethod(QWSInputMethod*)激活該輸入法後, 輸入法框架會把應用程序的信息發送給QWSInputMethod類, 由QWSInputMethod的虛函數來處理。 所以最核心的部分變成怎樣去實現一個QWSInputMethod的派生類,另外怎麼讓你的軟鍵盤窗口能和程序輸入窗口和QWSInputMethod和平共存,可以在軟鍵盤類中的構造函數加入QWidget(0 , Qt::Tool | Qt::WindowStaysOnTopHint),軟鍵盤中有過個按鈕可以利用QSignMapper類的派生類,用若干個按鈕連接一個槽,來執行相應的輸入(這裡是QSignMapper的基本用法)。 QWSInputMethod提供的sendPreeditString方法負責將預處理的文本發送給焦點窗體, 一般情況下編輯器會將此文本顯示為帶下劃線或虛線的文本, 表示這是編輯過程中的半成品; 然後QWSInputMethod::sendCommitString函數負責發送最終用戶確認的文本給編輯框。
QWSInputMethod派生類還應該去實現updateHandler虛函數,該虛函數是輸入法框架和輸入法之間的橋梁, 專門向輸入法發送一些狀態信息, 比如在焦點離開或進入編輯框時updateHandler函數就會被調用到, 在這裡加入你的輸入法的處理可以實現在適當時機顯示或隱藏輸入法widget(軟鍵盤)等功能。
下面是實現的代碼: