2009年5月28日

qscintillaの日本語表示について(調査)

PyQtも作っている英riverbankがscintillaをQt向けにポーティングしているQScintillaだが、いまいち日本語の使い勝手が悪い。
UTF-8を使うように設定すれば、入力も表示もできるんだけど、変換中の表示が一切ない。
なんでだろうと、ソースを調べてみると、inputMethodEventは実装されている。
でも、inputMethodQueryが実装されていない。
inputMethodQueryは編集領域や編集中のフォント、などをInputContextに渡してあげるためのメソッド。
多分これがないので、入力できるのに編集中の表示がないんだろう。
とりあえず、QtのQLineEditやQTextEditがどうやってるのか調べたのだが、ソースを追っかけるのも一苦労。
Q_Dマクロが至るところで使われていて、実装は、QLineEditPrivateとかQTextEditPrivateとかにあるのを知るまで一時間以上かかった。
とりあえず、inputMethodQueryはオーバーライド可能なので、QScintillaのサブクラスで実装してあげればいいのかな。というところ。

QVariant inputMethodQuery ( Qt::InputMethodQuery query )
Qt::InputMethodQueryが以下
ImMicroFocus:
ImFont:
ImCursorPosition:
ImSurroundingText:
ImCurrentSelection:

中で、switch文で振り分けて、QVariantでQFontやQRectFやQStringを返すような感じで…。
なぜ1つのメソッドでやらなきゃいけないのかいまいち理解に苦しむ。
ImFontはfont()メソッドで返しておけばいいんだろうけど、その他がなにを返せばいいものやら。
もう少しQTextEditの実装方法を眺めてみる。

あと、問題なのは描画メソッドの方でも、考慮するとこがあるっぽいところ。
結構茨の道だな。