Qt5のInput Method
      朝木卓見




                   1
Qt4からQt5へ
•   Qt4では各プラットフォームでIMに(も)個別対応

    •   QPAによる抽象化

    •   QWidget依存からの脱却が必要

•   デスクトップ全盛期はIMの重要度が低かった

    •   ユーザーが入力するだけ(アプリから制御出来ない)

    •   旧APIは自由度・拡張性・抽象度が低い

•   モバイルの躍進でIMへの需要が高まる

    •   アプリからの制御・アプリとの連携が必要に

                                   2
Qt4のInput Method

                 Application

                                              QtGui
QInputMethodEvent

               QInputContext
                  Qt GUI
 Windows    Mac OS X         X11            QWS
 IMM32     NSTextInput     immodule    QWSInputMethod




                    scim    ibus      uim



                                                        3
Qt4のAPI
• Qt::WA_InputMethodEnabled

• QInputContext

• QInputMethodEvent

• QWidget::inputMethodQuery()
                                            IMの制御は
• QWidget::inputMethodHints (4.6)            4.6から


• QEvent::RequestSoftwareInputPanel (4.6)

• QEvent::CloseSoftwareInputPanel (4.6)

                                                     4
Qt5の主な変化

• QInputContextクラスを整理

  • QPlatformInputContextとQInputMethodに分割

  • システム向けとアプリ向け

  • QWidget依存を取り除く

  • アプリとの連携を視野に


                                            5
QPlatformInputContext
• 各プラットフォームのInput MethodをQtにインテグ
 レーションするためのクラス

 • qtbase/src/platforms/*
 • qtbase/src/plugins/platforminputcontexts/* (X11)
 • QWidget非依存
 • QPA用API
    • 非アプリ向け
    • ソース・バイナリ互換維持の対象外

                                                      6
QInputMethod


• アプリとInput Methodが連携するためのAPI
   • http://qt-project.org/doc/qt-5.0/qtgui/qinputmethod.html

• show(), hide()
• keyboardRectangle()




                                                                7
InputMethodQuery
• Input Methodからアプリへの問い合わせ

  • カーソル、フォント、サラウンドテキスト等

• Qt4

  • QWidget::inputMethodQuery()

• Qt5

  • QInputMethodQueryEvent


                                  8
Qt5のInput Method

                         Application



QInputMethodEvent                      QInputMethod

                    QPlatformAbstraction
                     QPlatformInputContext


        Windows      Mac OS X
                                    ibus         Mallit
        IMM32       NSTextInput
                      Client


                                                          9
Qt5のAPI
• Qt::WA_InputMethodEnabled

• QPlatformInputContext (QPA API)

• QInputMethod

• QApplication::autoSipEnabled (Software Input Panel)

• QInputMethodEvent

• QInputMethodQueryEvent

• QWidget::inputMethodHints (値の追加あり)

• QEvent::RequestSoftwareInputPanel

• QEvent::CloseSoftwareInputPanel

                                                        10
Qt Quick 2


• inputMethodHintsプロパティの追加
  • TextInput
  • TextEdit
• Qt.inputMethodプロパティ




                             11
まとめ

• APIが大きく変更(主に以下のケースに影響)
 • Input Methodを実装する場合
 • 細かな制御が必要な場合
• 実装は?
 • 要確認



                           12
参考文献

• Create proper input method abstraction and expose
  it through a public API in QTGui

• Expose new QInputPanel API as global property
  Qt.application.inputPanel

• http://qt-project.org/groups/qt-contributors-
  summit-2011/wiki/
  Input_methods_and_Wayland_in_Qt_5

• 注) QInputMethodはQInputPanelという名前でした


                                                      13

Qt5 の Input Method