IMEからキー入力の受け取り
日本語入力システムなどのIMEからのキー入力を受け取りたい場合、QWidgetでkeyPressEventをオーバーライドしても受け取ることはできません。
keyPressEventで受け取ることができるのは半角1文字のみです。
では、どうやってIMEで変換または変換途中の文字列を受け取るかというとinputMethodEventをQWidgetクラスでオーバーライドします。
inputMethodEventに渡されるQInputMethodEventでは次の2つの関数でIMEにより変換された文字列を取得可能です。
- preeditString
- commitString
IMEで文字列が入力途中の場合にその文字列を返す。
IMEで入力途中だった文字列がエンターキーで確定された場合、その文字列を返す。
この2つのメソッドで変換途中と変換後の文字列を調べられます。
実装例
簡単な例としてQPlainTextEditでIMEの入力を受け取り、エディター上に表示する場合を考えてみます。
#ifndef MY_EDIT #define MY_EDIT #include <QPlainTextEdit> class MyEdit : public QPlainTextEdit { public: explicit MyEdit(QWidget * parent = 0) : QWidget(parent){} protected: void inputMethodEvent(QInputMethodEvent * e) { QWidget::inputMethodEvent(e); if(!e->commitString().isEmpty()){ insertPlainText(e.commitString()); ///変換後のテキスト挿入 } } }; #endif ///MY_EDIT
commitStringが空でない、つまり入力途中でないことを確かめたらエディターに変換後のテキストを挿入しています。
以上、QWidgetでIMEの入力を受け取る方法でした。では、また!
© Kaz