配備ガイド

概要

このドキュメントでは、Qt Virtual Keyboard プラグインを Qt アプリケーションにデプロイして使用する方法について説明します。

配置

様々な Qt Virtual Keyboard プラグインとファイルは、以下の場所に配置されます:

項目デスクトップのインストールパスBoot2Qt インストールパス
qtvirtualkeyboardplugin プラットフォーム入力コンテキストプラグイン<QT_INSTALL_PLUGINS>/platforminputcontexts/system/plugins/platforminputcontexts
qtvkbplugin QML プラグイン<QT_INSTALL_QML>/QtQuick/VirtualKeyboard/system/qml/QtQuick/VirtualKeyboard
qtvkbcomponentsplugin QML プラグイン<QT_INSTALL_QML>/QtQuick/VirtualKeyboard/Components/system/qml/QtQuick/VirtualKeyboard/Components
qtvkblayoutsplugin QML プラグイン<QT_INSTALL_QML>/QtQuick/VirtualKeyboard/Layouts/system/qml/QtQuick/VirtualKeyboard/Layouts
qtvkbplugins プラグイン QML プラグイン<QT_INSTALL_QML>/QtQuick/VirtualKeyboard/Plugins/system/qml/QtQuick/VirtualKeyboard/Plugins
拡張 QML プラグイン<QT_INSTALL_QML>/QtQuick/VirtualKeyboard/Plugins/*/system/qml/QtQuick/VirtualKeyboard/Plugins/*
qtvkbsettingsplugin QML プラグイン<QT_INSTALL_QML>/QtQuick/VirtualKeyboard/Settings/system/qml/QtQuick/VirtualKeyboard/Settings
qtvkbstylesplugin QML プラグイン<QT_INSTALL_QML>/QtQuick/VirtualKeyboard/Styles/system/qml/QtQuick/VirtualKeyboard/Styles
仮想キーボードデータ<QT_INSTALL_DATA>/qtvirtualkeyboard/system/qtvirtualkeyboard

依存関係

詳しくはQt のライブラリのデプロイ をご覧ください。

統合方法

Qt Virtual Keyboardは現在2つの統合方法をサポートしています:

  • Desktop既存のアプリケーションに変更を加える必要がありません。Qt Virtual Keyboard はシステム内の全ての Qt アプリケーションで利用可能です。

    この統合方法では、キーボードは専用のトップレベルウィンドウに表示されます。

  • Application仮想キーボードは、QML のInputPanel アイテムをインスタンス化することで、Qt アプリケーション自体に埋め込まれます。

    この方法は、複数のトップレベルウィンドウがサポートされていない環境(組み込み機器など)では必須ですが、デスクトップアプリケーションでも使用できます。

    このメソッドはQt Waylandコンポジタがサーバサイドの仮想キーボードを提供するためにも使用できます。詳細は以下のセクションを参照してください。

統合方法はプロジェクトファイルによって自動的に選択されます。しかし、デスクトップ環境では、QT_VIRTUALKEYBOARD_DESKTOP_DISABLE 環境変数を使用するか、configure コマンドラインに-no-vkb-desktop を追加することで、デスクトップ統合方法をオーバーライドし、代わりにアプリケーション統合方法を使用することができます。

Qt WaylandでQt Virtual Keyboardを使う

このセクションでは、コンポジターとしてFancy Compositor のサンプルを使ってQtWidgets Line Edits のサンプルと対話するために Qt Virtual Keyboard を使う方法を説明します。

ここではUbuntu 18.04を使用し、ウィンドウシステムとしてX11を使用しています。コンポジターの例 (fancy-compositor) は、X11 セッション内のウィンドウとして開きます。

  1. コンポジターを起動します:
    QT_XCB_GL_INTEGRATION=xcb_egl QT_WAYLAND_CLIENT_BUFFER_INTEGRATION=xcomposite-egl \
    QT_IM_MODULE=qtvirtualkeyboard ./fancy-compositor -platform xcb
  2. クライアント・アプリケーションを実行する前に、QT_IM_MODULE が設定されていないことを確認してください:
    unset QT_IM_MODULE
  3. Line Edits のサンプルをクライアントとして起動します:
    ./lineedits -platform wayland
  4. 行編集をクリックすると、Qt Virtual Keyboard の入力パネルが開きます。

問題が発生した場合、コンポジターの実行時に以下の環境変数を設定することで、問題の診断に役立つデバッグ出力を得ることができます:

WAYLAND_DEBUG=1
QT_LOGGING_RULES="qt.virtualkeyboard=true;qt.qpa.wayland*=true"

プラグインのロード

どちらの統合方法でも、アプリケーションはQT_IM_MODULE 環境変数を使用してプラグインをロードする必要があります。例えば

$ QT_IM_MODULE=qtvirtualkeyboard myapp

または main() 関数の中で行います:

qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard"));

デスクトップ統合では、Qt Virtual Keyboard を使うために必要なのはこのステップだけです。アプリケーションとの統合では、次の章で説明するように、InputPanel のインスタンスを作成する必要があります。

InputPanelの作成

次の例では、InputPanel を作成し、アプリケーションコンテナで画面領域を分割する方法を示します。

import QtQuick
import QtQuick.VirtualKeyboard

Item {
    id: root
    Item {
        id: appContainer
        anchors.left: parent.left
        anchors.top: parent.top
        anchors.right: parent.right
        anchors.bottom: inputPanel.top
        ...
    }
    InputPanel {
        id: inputPanel
        y: Qt.inputMethod.visible ? parent.height - inputPanel.height : parent.height
        anchors.left: parent.left
        anchors.right: parent.right
    }
}

入力パネルは、アプリケーション・コンテナの隣の兄弟要素でなければなりません。入力パネルをアプリケーション・コンテナ内に配置しないことが重要です。また、入力パネルの高さは使用可能な幅に応じて自動的に更新されます。

環境変数

モジュールによって定義される環境変数がいくつかあります:

変数目的
qt_virtualkeyboard_hunspell_data_pathHunspellデータファイルの場所を上書きします。

デフォルトの場所はQLibraryInfo::path(QLibraryInfo::DataPath) の値に依存します。 例えば、ソースからビルドされた Qt ライブラリの場合はqtbase/qtvirtualkeyboard/hunspell になります。

詳細については、「Hunspell Integration」を参照してください。

qt_virtualkeyboard_pinyin_dictionaryピンイン辞書の場所を上書きします。

デフォルトでは、辞書はプラグインのリソースにバンドルされています。

リソースをバンドルしないようにするには、Qt configureコマンドラインに-vkb-no-bundle-pinyinを追加します。このシナリオでは、デフォルトの場所はQLibraryInfo::path(QLibraryInfo::DataPath) の値に依存します。 例えば、ソースからビルドされたQtライブラリの場合、qtbase/qtvirtualkeyboard/pinyin/dict_pinyin.dat になります。

qt_virtualkeyboard_cangjie_dictionaryCangjie辞書の場所を上書きします。

デフォルトでは、辞書はプラグインのリソースにバンドルされています。

リソースをバンドルしないようにするには、Qt configureコマンドラインに-vkb-no-bundle-tcimeを追加してください。このシナリオでは、デフォルトの場所はQLibraryInfo::path(QLibraryInfo::DataPath) の値に依存します。 例えば、ソースからビルドされたQtライブラリの場合、qtbase/qtvirtualkeyboard/tcime/dict_cangjie.dat になります。

qt_virtualkeyboard_zhuyin_dictionaryZhuyin辞書の場所を上書きします。

デフォルトでは、辞書はプラグインのリソースにバンドルされています。

リソースをバンドルしないようにするには、Qt configureコマンドラインに-vkb-no-bundle-tcimeを追加します。このシナリオでは、デフォルトの場所はQLibraryInfo::path(QLibraryInfo::DataPath) の値に依存します。例えば、ソースからビルドされた Qt ライブラリの場合、qtbase/qtvirtualkeyboard/tcime/dict_zhuyin.dat になります。

qt_virtualkeyboard_phrase_dictionaryフレーズ辞書の場所を上書きします。

デフォルトでは、辞書はプラグインのリソースにバンドルされています。

リソースをバンドルしないようにするには、Qt configure コマンドラインに-vkb-no-bundle-tcimeを追加します。このシナリオでは、デフォルトの場所はQLibraryInfo::path(QLibraryInfo::DataPath) の値に依存します。例えば、ソースからビルドされた Qt ライブラリの場合、qtbase/qtvirtualkeyboard/tcime/dict_phrases.dat になります。

qt_virtualkeyboard_cerence_hwr_db_pathCerence Handwriting 手書きデータベースの場所を指定します。

Cerence Handwriting 手書きデータベースのデフォルトの検索場所は次のとおりです:

  • QT_VIRTUALKEYBOARD_CERENCE_HWR_DB_PATH
  • QLibraryInfo::location(QLibraryInfo::DataPath) + "/qtvirtualkeyboard/cerence/handwriting"
  • ":/qt-project.org/imports/QtQuick/VirtualKeyboard/Cerence/Handwriting"

環境変数には複数のパスを指定できます。複数のパスは、Windows ではセミコロンで区切られ、その他のオペレーティング システムではコロンで区切られます。

qt_virtualkeyboard_xt9_ldb_pathXT9データベースの場所を指定します。

LDB ファイルのデフォルトの検索場所は次のとおりです:

  • QT_VIRTUALKEYBOARD_XT9_LDB_PATH
  • QLibraryInfo::location(QLibraryInfo::DataPath) + "/qtvirtualkeyboard/cerence/xt9"
  • ":/qt-project.org/imports/QtQuick/VirtualKeyboard/Cerence/Xt9"

この環境変数を設定することで、追加の検索パスを指定できます。複数のパスは、Windowsではセミコロンで、他のOSではコロンで区切られる。

LDB ファイルは XT9 と Cerence Handwriting プラグイン間で共有されるため、この環境変数は両方のプラグインに影響します。

qt_virtualkeyboard_style仮想キーボードで使用するスタイルの場所を指定します。

これは QML でVirtualKeyboardSettings::styleName を設定するか、ビルド時に設定オプションを使って指定することもできます。

qt_virtualkeyboard_layout_path仮想キーボードで使うレイアウトの場所を指定します。
qt_virtualkeyboard_desktop_disableデスクトップ統合方式を無効にします。
qt_virtualkeyboard_force_events_without_focusQt Virtual Keyboard が、テキスト入力にフォーカスがなくてもキーイベントを送ったり Shift キーを使ったりできるようにします。

この変数を有効にするには、アプリケーションの実行環境で明示的に設定する必要があります。アプリケーション自体でqputenv() を使用するだけでは十分ではありません。

本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。