Qt GUIでキーボード、タッチスクリーン、音声入力を制覇!QGuiApplication::inputMethod()の活用術


QGuiApplication::inputMethod() は、Qt GUI アプリケーションで現在使用されている入力方式を取得するための静的関数です。入力方式とは、ユーザーがテキストを入力するための方法、つまりキーボード、タッチスクリーン、音声入力などです。

戻り値

この関数は、現在使用されている入力方式を表す QInputMethod オブジェクトへのポインタを返します。入力方式が使用されていない場合は、nullptr を返します。

QInputMethod *inputMethod = QGuiApplication::inputMethod();

if (inputMethod) {
  // 入力方式が使用されている場合
  QString language = inputMethod->languageCode();
  qDebug() << "Current input method language:" << language;
} else {
  // 入力方式が使用されていない場合
  qDebug() << "No input method is currently active.";
}
  • 入力方式は、QInputMethodEvent クラスを使用してイベントを処理できます。このクラスには、入力方式からのイベントに関する情報が含まれています。
  • 入力方式は、QGuiApplication::setInputMethod() 関数を使用して設定できます。この関数は、QInputMethod オブジェクトへのポインタを渡します。
  • QInputMethodEvent
  • QInputMethod
  • この解説は、Qt 6.x を対象としています。古いバージョンの Qt では、関数の名前や引数が異なる場合があります。


  1. 現在使用されている入力方式を取得します。
  2. 入力方式が使用されている場合は、入力方式の言語をコンソールに出力します。
  3. 入力方式が使用されていない場合は、ユーザーに新しい入力方式を選択するように促します。
  4. ユーザーが入力方式を選択したら、それを現在の入力方式として設定します。
#include <QApplication>
#include <QInputMethod>
#include <QInputMethodEvent>

int main(int argc, char *argv[]) {
  QApplication app(argc, argv);

  // 現在使用されている入力方式を取得する
  QInputMethod *inputMethod = QGuiApplication::inputMethod();

  if (inputMethod) {
    // 入力方式が使用されている場合
    QString language = inputMethod->languageCode();
    qDebug() << "Current input method language:" << language;
  } else {
    // 入力方式が使用されていない場合
    qDebug() << "No input method is currently active.";

    // ユーザーに新しい入力方式を選択するように促す
    QInputMethod *newInputMethod = QInputMethod::createInputMethod(QLocale::system().language());
    if (newInputMethod) {
      // ユーザーが入力方式を選択したら、それを現在の入力方式として設定する
      QGuiApplication::setInputMethod(newInputMethod);
    }
  }

  // ... 他のアプリケーションコード ...

  return app.exec();
}

このコードは、入力方式の基本的な使用方法を示すものです。入力方式を使用してより複雑な操作を行うには、QInputMethod クラスの他のメソッドを参照してください。

  • このコードは、Qt 6.x を対象としています。古いバージョンの Qt では、関数の名前や引数が異なる場合があります。


QInputMethod::createInputMethod() を使用する

この方法は、特定の言語または入力方式に合わせた入力方式を取得したい場合に有効です。

利点

  • 入力方式が使用可能かどうかを確認できる
  • 特定の言語または入力方式に合わせた入力方式を取得できる

欠点

  • 入力方式が使用可能でない場合は、nullptr を返す
  • 入力方式が使用可能かどうかを確認する必要がある


QInputMethod *inputMethod = QInputMethod::createInputMethod("en_US");

if (inputMethod) {
  // 入力方式が使用可能
  // ...
} else {
  // 入力方式が使用不可
  // ...
}

QInputMethodEvent を使用する

この方法は、入力方式からのイベントを処理する必要がある場合に有効です。

利点

  • 入力方式からのイベントを直接処理できる

欠点

  • 入力方式からのイベントを処理するためのコードを記述する必要がある


void inputMethodEvent(QInputMethodEvent *event) {
  // 入力方式からのイベントを処理
  // ...
}

QInputMethod *inputMethod = QGuiApplication::inputMethod();
if (inputMethod) {
  inputMethod->connect(inputMethod, &QInputMethod::inputMethodEvent, this, &inputMethodEvent);
}

プラットフォーム固有の API を使用する

この方法は、特定のプラットフォームでしか使用できない入力方式にアクセスする必要がある場合に有効です。

利点

  • 特定のプラットフォームでしか使用できない入力方式にアクセスできる

欠点

  • プラットフォームごとに異なるコードを記述する必要がある


// Windows の場合
#include <windows.h>

HKL inputMethodHandle = GetKeyboardLayout(0);
QInputMethod *inputMethod = QInputMethod::createInputMethodFromHandle(inputMethodHandle);

// macOS の場合
#include <Carbon/Carbon.h>

TISInputSourceRef inputMethodSource = GetCurrentTextInputSource();
QInputMethod *inputMethod = QInputMethod::createInputMethodFromSource(inputMethodSource);

QGuiApplication::inputMethod() は、多くの場合、Qt GUI アプリケーションで現在使用されている入力方式を取得するための最良の方法です。しかし、特定の状況では、上記の代替方法の方が適切な場合があります。

  • プラットフォーム固有の API に関する詳細は、各プラットフォームのドキュメントを参照してください。