このページでは

C

Qt Quick ウルトラライトバーチャルキーボードの概要

Qt Quick Ultralite Virtual Keyboard モジュールは、アプリケーションでの仮想キーボード・サポートを可能にします。

Qt Quick Ultralite Virtual Keyboard プロジェクトは入力フレームワークとリファレンス・キーボード・フロントエンドを提供します。入力フレームワークは実行時にカスタム入力メソッドとキーボードレイアウトをロードできるように拡張可能です。

バーチャルキーボードはQMLでInputPanel 。次の例では、InputPanel の作成方法と、アプリケーションコンテナで画面領域を分割する方法を示します。

InputPanel {
    id: keyboard
    width: StyleConstants.vkbScreenWidth
    y: root.height - keyboard.height
}

入力パネルのアスペクト比は一定です。

完全な例についてはQt Quick Ultralite text_input Example を参照してください。

このモジュールはQt Quick Ultralite バージョン2.9から完全にサポートされています。

機能

Qt Quick Ultralite バーチャルキーボードの主な特徴は以下の通りです:

  • カスタマイズ可能なキーボードレイアウトとスタイル。
  • 異なる解像度へのスケーラビリティ
  • 文字プレビューと代替文字表示
  • 単語候補表示によるピンイン入力
  • さまざまな文字セットをサポート(ラテン語、中国語、ヒンディー語、アラビア語、ヘブライ語、その他)。
  • 最も一般的な入力言語をサポート。
  • 左から右への入力と右から左への入力。
  • クロスプラットフォーム機能。

対応言語

バーチャルキーボードは以下の言語に対応しています:

  • アルバニア語
  • アラビア語
  • ブルガリア語
  • ブルガリア語(ラテン語)
  • クロアチア語
  • チェコ語
  • デンマーク語
  • オランダ語
  • 英語(イギリス)
  • 英語(アメリカ)
  • エストニア語
  • フィンランド語
  • フランス語
  • フランス語(カナダ)
  • ドイツ語
  • ギリシャ語
  • ギリシャ語(ラテン語)
  • ヘブライ語
  • ヘブライ語(ラテン語)
  • ヒンディー語
  • ハンガリー語
  • インドネシア語
  • イタリア語
  • マレー語
  • ノルウェー語
  • ペルシア語
  • ポーランド語
  • ポルトガル語
  • ルーマニア語
  • ロシア語
  • セルビア語
  • セルビア語(ラテン語)
  • 簡体字中国語(ピンイン)
  • スロバキア語
  • スロベニア語
  • スペイン語
  • スウェーデン語
  • タイ語
  • トルコ語
  • ウクライナ語
  • ベトナム語

注: 英語(米国)、英語(英国)、オランダ語、マレー語、インドネシア語はすべて、バンドルレイアウトでfallback/main.qml 。スペイン語とスペイン語(メキシコ)は同じです。ポルトガル語(ブラジル)とポルトガル語(ポルトガル)は同一です。

追加言語のサポートを追加するには、「言語の追加と削除」と「新しいキーボードレイアウトの追加」を参照してください。

モジュールの使用

Qt Quick Ultralite Virtual Keyboard QML タイプを使用するには、.qmlprojectモジュールファイルのリストにQul::VirtualKeyboard を追加してください。

ModuleFiles {
    MCU.qulModules: ["Qul::VirtualKeyboard"]
}

モジュールファイルを追加した後、.qml ファイルに以下の import 文を追加してください:

import QtQuick.VirtualKeyboard

Note: Qt Quick Ultralite Virtual Keyboardモジュールは、qmlproject ファイルに依存している部分があるため、非推奨のCMake APIでは動作しません。

詳細については、Qt Quick Ultralite text_input Exampleを参照してください。

入力フレームワークの概念

このセクションでは、入力フレームワークの背後にある主要な概念について簡単に説明します。これらの概念を理解することは、高度なユースケースを扱うために不可欠です。

単に仮想キーボードをアプリケーションに統合したい場合は、アプリケーション開発者向けAPIを参照してください。

入力コンテキスト

仮想キーボードやその他の入力コンポーネントのコンテキスト情報を提供します。基礎となるテキスト入力コンポーネントへのインターフェースとして機能します。

入力コンテキストは、キーボードや具体的な入力メソッドによって使用されます。InputContext はシングルトンインスタンスです。アプリケーションは入力コンテキストと直接対話するべきではありません。

入力エンジン

ユーザー入力イベント(キー押下)を統合するAPIを公開し、入力メソッドのホストとして動作する。

InputEngine オブジェクトには、InputContext アイテムのinputEngine プロパティでアクセスできます。InputContext と同様に、入力エンジンのインスタンスは 1 つだけです。入力エンジンには、キーボードがキー押下やキー離しなどのユーザー操作を入力メソッドにマッピングするために使用するAPI関数が含まれています。

入力メソッド

入力メソッドは、キー押下ハンドラの具体的な実装です。主な機能は、キー押下イベントを処理し、ユーザー入力の状態情報を保持することです。このメソッドはInputContext を通してテキストエディタと対話します。

inputメソッドのインスタンスは、ユースケースに応じて様々な方法で作成することができます:

  • KeyboardLayout::inputMethodキーボードレイアウトは、そのキーボードレイアウト専用の入力メソッドインスタンスを作成できます。
  • 入力エンジンは起動時にデフォルトの入力メソッドを作成します。このインスタンスは、キーボードレイアウトがカスタム入力メソッドを使用しない限り、すべてのキーボードレイアウトでデフォルト入力メソッドとして使用されます。

注: 現在、カスタム入力メソッドを書くためのパブリックAPIは提供されていません。

仮想キーボードのスケーリング

仮想キーボードの画面幅を設定するには、MCU.Config.Experimental.vkbScreenWidthを使用します。この値はStyleConstants.vkbScreenWidth に伝わります。

InputPanel {
    id: keyboard
    anchors.horizontalCenter: parent.horizontalCenter
    width: StyleConstants.vkbScreenWidth
    y: root.height - keyboard.height
}

先の例では、物理的な画面幅が1000 であると仮定しています。以下の画像でわかるように、左側ではMCU.Config.Experimental.vkbScreenWidthは 800 、右側では1000

MCU.Config.Experimental.vkbScreenWidth800MCU.Config.Experimental.vkbScreenWidth です。1000

また、先の例では、ImageFiles.MCU.Experimental.resourceSVGScaleプロパティを使用して、仮想キーボードのデフォルト・スタイルの画像アセットのスケール・ファクターを調整しています。

注: これらのスケーリングAPIは、Qt Quick

ピンインのサポート

Qt Quick Ultralite Virtual Keyboard は簡体字中国語のピンイン入力メソッドをサポートしています。この入力メソッドは辞書ファイルと多数のグリフを必要とし、Qt for MCUs アプリケーションの最終的なバイナリサイズに大きな影響を与える可能性があります。このため、Qt Quick Ultralite Virtual Keyboard モジュールはデフォルトで空の辞書を使用し、ピンイン入力メソッドを事実上無効にしています。アプリケーションの.qmlproject ファイルでMCU.Config.vkbPinyinSupportQmlProject プロパティを使用して、最も一般的な単語と文字を含む辞書でピンイン入力メソッドを有効にします。文字や単語を追加または削除するために辞書ファイルをカスタマイズする必要がある場合は、qulpinyingeneratorツールを使用して生データから辞書ファイルを生成し、MCU.Config.vkbPinyinDictionaryQmlProjectプロパティを使用してカスタム辞書を使用するようにアプリケーションを設定します。

すべてが正しく設定されている場合、ピンイン入力を入力すると、次の画像で示されているように、選択候補が表示されます。入力候補は、アプリケーションにバンドルされている辞書に依存することに注意してください。

qulpinyingenerator

qulpinyindgenerator ツールは、生の辞書ファイルに基づいて、Qt Quick Ultralite Virtual Keyboard モジュールでピンイン辞書として使用できるヘッダーファイルを生成します。デフォルト辞書の生成に使用される辞書ファイルは、${QUL_ROOT}/src/3rdparty/pinyin/data/rawdict_utf16_65105_freq.txt にある。

入力ファイル

--file 引数を使用して、カスタム辞書を生成するための生辞書データを指定する。このデータは、${QUL_ROOT}/src/3rdparty/pinyin/data/rawdict_utf16_65105_freq.txt にあるデフォルトのピンイン辞書を生成するために使用される辞書と同じ形式でなければならない。

未加工データの形式では、1行に1つの項目が配置され、漢字で始まり、その文字の頻度を示す数字が続き、その文字がGBKエンコードを使用しているかどうかを示す0または1が続き、最後にその項目のピンイン綴りが続きます。

// hanzi, frequency, GBK, spelling
...
嗒 322.010219858 0 da
哒 1540.35530331 0 da
搭 2238.62771494 0 da
...

出力パス

--outputPath コマンドライン引数を使用して、生成されたファイルの場所を指定します。ファイルは「qul_pinyin_custom_dict.h」という名前で、指定されたパスに直接置かれます。アプリケーションでカスタム辞書を使用するには、アプリケーションの.qmlproject ファイルのMCU.Config.vkbPinyinDictionaryプロパティでこのパスを指定します。

最小頻度

生の辞書データには、各エントリの頻度がリストされています。qulpinyingenerator ツールでは、--minFrequency コマンド行オプションを使用して、頻度の低い項目をフィルタリングできます。選択された最小頻度よりも高い頻度でリストされた項目のみが、生成された辞書で使用される。

フィルタリング処理では、単語の個々の文字が除外されることがある。ツールによって複数文字の単語が辞書に含まれる場合でも、その文字の頻度が低ければ、その単語の個々の文字を除外することができる。その結果、ユーザーは、含まれる単語で使用可能な文字のみを使用するように制限される。

たとえば、最小頻度のしきい値が、以下の生辞書データに対して1000 である場合:

尬 231.735198139 0 ga
尴 13.7430867735 0 gan
尴尬 2908.26886413 0 gan ga

頻度がしきい値を超えたため、ツールは単語「尴」を辞書に含める。ただし、個々の文字「尴」と「尬」は除外される。これは、それらの頻度が1000 より低いためである。

Qt for MCUs 2.10以降、ある文字が包含される単語の一部である場合、その頻度は関係なく辞書に保持される。これによって、先の例に「华」と「尬」を含めることが可能になり、ユーザーにより広範な文字を提 供することができる。

ユニコードの範囲

辞書自体に加え、qulpinyingenerator からの出力ファイルには、辞書の項目で使用されるグリフをカバー するユニコード範囲も含まれている。こ れ ら の範囲を使っ て、 QML でfont.unicodeCoverage を設定 し た り 、 Monotype FontmapEditor Subsetter 機能でフ ォ ン ト フ ァ イ ルを変更し て未使用のグ リ フ を削除 し た り す る こ と がで き ます。短い範囲がたくさんあり、その間にわずかな隙間がある場合、エントリリストのエントリの量は非常に大きくなります。サポー ト す る unicode 範囲の リ ス ト を単純化す る には、--unicodeRangeTolerance コ マ ン ド ラ イ ン引数を用い る と 、 い く つかの未使用グ リ フ を含む こ と を犠牲 と し て も 、 隣 り 合 う 範囲を連結す る こ と がで き ます。--unicodeRangeTolerance は、ユニコード範囲のリストが長すぎるときに Monotype FontmapEditor Subsetter でクラッシュするのを回避するために導入されました。

使用例:

qulpinyingenerator --file=${QUL_ROOT}/src/3rdparty/pinyin/data/rawdict_utf16_65105_freq.txt --outputPath=pinyin/my_custom_dict --minFrequency=1000 --unicodeRangeTolerance=6

フォントユニコードカバレッジ設定も参照してください。

キーボードレイアウト

キーボードレイアウトはsrc/virtualkeyboard/layoutsディレクトリにあります。layoutディレクトリの各サブディレクトリはロケールを表します。ロケールディレクトリはQLocale::bcp47Name文字列で、キーボードレイアウトを一意に識別します。ロケール情報は、入力言語が左から右へ書かれているか、右から左へ書かれているかを判断したり、特定の言語に適切な「コンマ」ユニコード文字を識別したり、言語のネイティブ名を表示したりするために利用できます。

エン ジ ンは、ロ ケール表に挙げ ら れてい るbcp47Name の名前を認識 し ます。

レイアウトの種類

異なるキーボードレイアウトタイプは異なる入力モードで使用されます。通常のテキスト入力に使われるデフォルトのレイアウトはmain レイアウトと呼ばれます。レイアウトの種類はレイアウトファイル名によって決定され、main レイアウトの場合はmain.qml となります。

注: 内部的な技術的理由により、レイアウト名の前にロケール・ディレクトリ名を付ける必要があります。例えば、./uk/uk_main.qmluk ロケール用のレイアウトファイルです。

サポートされているレイアウト・タイプのリスト

  • main 通常のテキスト入力用のメインレイアウト
  • symbols 特殊文字用のシンボルレイアウト (メインレイアウトから有効になります)
  • numbers フォーマットされた数字用の数字レイアウト (Qt.ImhFormattedNumbersOnly でアクティブ化)
  • digits 数字のみのレイアウト(Qt.ImhDigitsOnly でアクティブ化)
  • dialpad 電話番号入力用のダイヤルパッド レイアウト (Qt.ImhDialableCharactersOnly で有効になります)

入力ロケール

Virtual Keyboard エンジンは、src/virtualkeyboard/layouts/ にあるロケール固有のレイアウトディレクトリから、サポートされるロケールのリストを生成します。layouts/ ディレクトリにはfallback/ サブディレクトリがあり、各レイアウトの定義が含まれています:dialpad digitsmainnumberssymbols

各レイアウト・ディレクトリには、1つ以上のレイアウト・タ イプの定義を含めることができる。ロケール固有のレイアウトがフォールバック・ロケールのレイアウトと同じであれば、仮想キーボードを頼りにfallback/ ディレクトリからレイアウト・タイプを検索することができます。ロケール固有のディレクトリが要求されたレイアウトタイプを提供しない場合、QULVkb はfallback/ レイアウトのいずれかを代わりに使用します。

例えば、フィンランド語のロケール固有のレイアウトを追加し、そのメインレイアウトをfi_main.qml で定義し、他のレイアウトタイプのフォールバックメカニズムを選択することができます。layouts/ ツリーはこのようになります:

.
├── fallback
│   ├── dialpad.qml
│   ├── digits.qml
│   ├── handwriting.qml
│   ├── main.qml
│   ├── numbers.qml
│   └── symbols.qml
└── fi
    └── fi_main.qml

src/virtualkeyboard/layouts/fallback ディレクトリには、常に完全な実装ファイル一式を置くことが必須です。

アプリケーションはVirtualKeyboardSettings.locale を使ってアクティブなロケールを指定できます。KeyboardLayout にはChangeLanguageKey ボタンがあり、利用可能な言語を切り替えることができます。

新しいキーボードレイアウトの追加

キーボードレイアウト要素は、レイアウトのルートアイテムであるKeyboardLayout QMLタイプに基づいていなければなりません。

キーボードレイアウトに新しい行を追加するにはKeyboardRow 。子要素のキーウェイトはKeyboardLayout.keyWeightプロパティから継承されます。

Keyタイプまたは特殊なキー・タイプの1つを使用して、新しいキーボード行にキーを追加します。以下は、すべての組み込みキー・タイプのリストです:

BackspaceKey

キーボードレイアウトのBackspaceキー

ChangeLanguageKey

言語変更キー(キーボードレイアウト用

EnterKey

キーボードレイアウト用のEnterキー

FillerKey

キーボードレイアウト用Fillerキー

HideKeyboardKey

キーボードレイアウト用Hideキー

InputModeKey

キーボードレイアウト用入力モードキー

Key

キーボードレイアウト用常用漢字キー

ModeKey

キーボードレイアウト用汎用モードキー

ShiftKey

キーボードレイアウト用Shiftキー

SpaceKey

キーボードレイアウト用Spaceキー

SymbolModeKey

キーボードレイアウト用記号モードキー

例えば、入力メソッドにキーイベントを送信する通常のキーを追加するには、次のようにします:

import QtQuick
import QtQuick.VirtualKeyboard
import QtQuick.VirtualKeyboard.Components

KeyboardLayout {
    keyWeight: 160
    KeyboardRow {
        Key {
            key: Qt.Key_Q
            text: "q"
        }
    }
}

キーサイズの計算

キーボード・レイアウトはスケーラブルであるため、レイアウト内のアイテムに固定サイズを設定することはできません。その代わりに、各キーの幅は、他のキーに対するキーの重さと高さから計算され、キーボードの行に均等にスペースが分割されます。

先ほどの例では、キーのサイズはKeyboardLayout から継承されています。

キーウェイトの実効値は160になる。この例では、カスタムのキーウェイトを指定するキーをもう1つ追加してみましょう:

import QtQuick
import QtQuick.VirtualKeyboard
import QtQuick.VirtualKeyboard.Components

KeyboardLayout {
    keyWeight: 160
    KeyboardRow {
        Key {
            key: Qt.Key_Q
            text: "q"
        }
        Key {
            key: Qt.Key_W
            text: "w"
            weight: 200
        }
    }
}

これで、1行のキーウェイトの合計は160 + 200 = 360となります。キーボードレイアウトを有効にすると、個々のキーの幅は次のように計算されます:

キーの幅(ピクセル) = キーの重さ / SUM(行のキーの重さ) * 行の幅(ピクセル

つまり、キーボードはどんなサイズにも拡大縮小でき、相対的なキーのサイズは変わりません。

代替キー

KeyにはalternativeKeysプロパティを指定することができ、QULVkbはこのプロパティを使用して、ユーザーがキーを長押ししたときに代替キーの一覧をポップアップで表示します。

alternativeKeysには、文字列または文字列のリストを指定できます。alternativeKeysが文字列の場合、ユーザーは文字列内の文字を選択することができます。

スタイルとレイアウト

キーボード・レイアウトは視覚的要素を指定することはできません。代わりに、レイアウトはキーボード・スタイルによって視覚化されます。一方、キーボードスタイルはキーボードレイアウトのサイズに影響を与えることはできません。

複数ページのキーを持つキーボード レイアウト

シンボルレイアウトのようなキーボードレイアウトの中には、1つのキーボードレイアウトで表示可能な数よりも多くのキーを含むものがあります。そのような場合は、KeyboardLayoutLoader を使って複数のキーボード・レイアウトを同じコンテキストに埋め込んでください。

KeyboardLayoutLoader をキーボードレイアウトのルートアイテムとして使用する場合、実際のキーボードレイアウトは Component 要素の中にラップされます。キーボードレイアウトは、アクティブなコンポーネントのidをsourceComponentプロパティに代入することでアクティブになります。

例えば

import QtQuick
import QtQuick.VirtualKeyboard
import QtQuick.VirtualKeyboard.Components

KeyboardLayoutLoader {
    property bool secondPage
    onVisibleChanged: if (!visible) secondPage = false
    sourceComponent: secondPage ? page2 : page1
    Component {
        id: page1
        KeyboardLayout {
            KeyboardRow {
                Key {
                    displayText: "1/2"
                    functionKey: true
                    onClicked: secondPage = !secondPage
                }
            }
        }
    }
    Component {
        id: page2
        KeyboardLayout {
            KeyboardRow {
                Key {
                    displayText: "2/2"
                    functionKey: true
                    onClicked: secondPage = !secondPage
                }
            }
        }
    }
}

言語の追加と削除

Qt Quick Ultralite Virtual Keyboard モジュールでビルドされたレイアウトと言語を追加および削除できます。レイアウトはモジュールの残りの部分と一緒にビルドされるため、レイアウトの追加や削除を変更するには、再度エクスポートしてモジュールをビルドする必要があります。アプリケーションは実行時に動的にキーボードレイアウトを変更できますが、モジュールがビルドされた後に新しいレイアウトを追加または削除することはできません。

Qt Quick Ultralite Virtual Keyboardビルドから不要なレイアウトを削除するには、Qt Quick Ultraliteインストールディレクトリの.qmlproject ファイルから除外したいレイアウトをコメントアウトしてください(src/virtualkeyboard/virtualkeyboard/VirtualKeyboardAssets.qmlproject )。

新しい言語やレイアウトを追加するには、Qt Quick Ultraliteインストールディレクトリのsrc/virtualkeyboard/layouts に、レイアウトに使用するロケールにちなんだディレクトリを作成してください。例えば、src/virtualkeyboard/layouts/nn はノルウェー語の nynorsk です。上記の指示に従って、新しい言語に対応するレイアウトを追加してください。最後に、Qt Quick Ultraliteインストールに属するVirtualKeyboardAssets.qmlproject ファイルのQmlFiles ノードにエントリを追加して、Qt Quick Ultralite仮想キーボードビルドに新しいロケールディレクトリを登録してください。

# Snippet from VirtualKeyboardAssets.qmlproject:
...
QmlFiles {
    files: [
        // styles
        "../styles/SelectionListItem.qml",
        "../styles/KeyboardStyle.qml",
        ...
        // layouts
// Place your custom layouts here vvvv
        "../layouts/nn/nn_main.qml",
        "../layouts/nn/nn_symbols.qml",
// Place your custom layouts here ^^^^

        // Unused language/layout is commented out
        //"../layouts/nb/nb_main.qml",
        // The following built-in layouts will be included
        "../layouts/sr/sr_main.qml",
        "../layouts/pt/pt_main.qml",
        "../layouts/bg/bg_main.qml",
        "../layouts/sl/sl_main.qml",
        "../layouts/zh/zh_main.qml",
        "../layouts/zh/zh_symbols.qml",
        "../layouts/ru/ru_main.qml",
        "../layouts/tr/tr_main.qml",
        "../layouts/fa/fa_main.qml",
        "../layouts/fa/fa_digits.qml",
        "../layouts/fa/fa_symbols.qml",
        "../layouts/fa/fa_numbers.qml",
        "../layouts/pl/pl_main.qml",
        ...
    ]
}
...

注: Qt Quick Ultraliteバーチャルキーボードモジュールビルドにレイアウトを追加したり、除外したりするこの方法は、今後のQt for MCUs リリースで変更される可能性があります。

注意 : 組み込み言語の中には、純粋にfallback ロケールに依存しているものがあります。alias.fallback がロケールディレクトリにある場合、ビルドツールはそのようなディレクトリを登録します。

キーボードスタイル

Qt Quick Ultralite Virtual Keyboard スタイルシステムは組み込みスタイルとカスタムスタイルをサポートしています。アプリケーションでQt Quick Ultralite 仮想キーボードを使用する場合、仮想キーボードスタイルと、そのスタイルを直接使用するモジュール内のコンポーネントは、Qt Quick Ultralite アプリケーションのビルド時にエクスポートおよびビルドされます。つまり、一度に使用できるスタイルは1つだけであり、スタイルを変更するにはアプリケーションを再エクスポートしてビルドする必要があります。実行時に新しいスタイルをロードすることはできません。

Qt for MCUs 2.9以降、ファイル・セレクタを使って仮想キーボードのスタイルを選択できます。このモジュールには、デフォルト・スタイルと "retro "という名前の代替スタイルの2つのスタイルが組み込まれています。qul_add_target()の中で、あるいはqmlprojectexporterをコマンドラインから直接使用するときに--selectorコマンドライン引数を使って、ファイルセレクタを使って必要なスタイルを選択してください。

## Applies the "retro" style to the VirtualKeyboard module
qul_add_target(MyQulApp
    QML_PROJECT MyApp.qmlproject
    SELECTORS "retro"
)

ファイルセレクタが提供されていないか、提供されたセレクタにマッチするスタイルがない場合、Qt Quick Ultralite Virtual Keyboard はデフォルトのスタイルを適用します。

スタイル設定API

Qt Virtual Keyboard スタイリングと Qt Quick Ultralite Virtual Keyboard スタイリングセットアップには顕著な違いがあります。

Qt:

  • スタイル全体はKeyboardStyle コンポーネントによって定義されます。
  • KeyboardStylestyle.qml という名前のファイルのルート項目です。

しかし、Qt Quick Ultralite では、QML 言語サポートの現在の制限により、KeyboardStyle API 定義はいくつかのファイルに分割されています。したがって、スタイリングAPIは次の表に示すコンポーネントで構成されます。組み込みの参照スタイルは、StyleConfig シングルトンを使用して、スタイル コンポーネント間で共通のプロパティを保存し、共有します。

注意: これは将来のリリースで変更される可能性があります。 Qt Virtual Keyboard.

AlternateKeysListBackground

代替キー リストの背景テンプレート

AlternateKeysListDelegate

代替キーリスト委任テンプレート

AlternateKeysListHighlight

代替キーリストのハイライト用テンプレート

BackspaceKeyPanel

Backspaceキー用テンプレート

CharacterPreviewDelegate

文字プレビューポップアップ用テンプレート

DefaultKeyboardStyle

具象スタイル用KeyboardStyle実装

EnterKeyPanel

EnterKey 用テンプレート

HideKeyPanel

HideKeyboardKey用テンプレート

KeyPanelDelegate

通常キー用テンプレート

KeyboardBackground

キーボード背景用テンプレート

KeyboardStyle

仮想キーボード用のスタイリング・インターフェースを提供します。

LanguageKeyPanel

ChangeLanguageKey 用テンプレート

SelectionListBackground

選択リスト背景用テンプレート

SelectionListDelegate

選択リストデリゲート用テンプレート

SelectionListHighlight

選択リストのハイライト用テンプレート

ShiftKeyPanel

Shiftキー用テンプレート

SpaceKeyPanel

SpaceKey 用テンプレート

StyleConstants

キーボード・スタイリング定数のシングルトン

SymbolKeyPanel

SymbolModeKey および InputModeKey 用テンプレート

カスタムスタイルの追加

新しいスタイルを作成するには、"retro" スタイルに隣接するQt for MCUs インストール ディレクトリに、スタイル用の新しいサブディレクトリを作成します。${QUL_ROOT}/src/virtualkeyboard/styles/builtin の下に、スタイルの名前と"+" の接頭辞を付けて、新しいディレクトリを作成します(例:${QUL_ROOT}/src/virtualkeyboard/styles/builtin/+my_style )。

注: Qt for MCUs 2.9現在、カスタム・スタイルは、仮想キーボード・モジュールがそれらを見つけることができるように、Qt for MCUs インストール・ディレクトリの組み込みスタイルの隣に配置する必要があります。これは将来のリリースで変更される可能性があります。

新しいスタイルを作成するための良い出発点は、既存の組み込みスタイルをテンプレートとして使用し、それを編集することです。組み込みスタイルを含むディレクトリの1つの内容を、スタイル用に作成したディレクトリにコピーします。スタイル ディレクトリには、先に挙げたすべての QML ファイルと、"images" ディレクトリが含まれているはずです。

スタイルでは画像をいくつでも自由に使用することができますが、スタイルで使用する画像ファイルは、他の場所やimages ディレクトリの中に入れ子にするのではなく、スタイルのimages サブディレクトリに直接置く必要があります。

注: スタイルのQMLファイルは、Qt Quick Ultralite Virtual Keyboardの他の部分でコンポーネントとして使用されるため、名前を変更しないでください。カスタムスタイルに新しいQMLファイルを追加することはできません。

スタイルをテストするには、キーボードの背景を別の色に設定して、正しいスタイルが適用されていることがわかるようにしてください:

## In your style's KeyboardBackground.qml:
Rectangle {
    color: "#FF0000"
}

最後のステップは、カスタム・スタイルでサンプル・アプリケーションを実行することです:

## Applies the "my_style" custom style to the VirtualKeyboard module
qul_add_target(MyQulApp_CustomStyle
    QML_PROJECT MyApp.qmlproject
    SELECTORS "my_style"
)

カスタム・スタイルでのスケーリング

スタイルが異なる画面サイズをサポートする必要がある場合、画像アセットのサイズを選択する際に注意が必要です。Qt Quick Ultralite Virtual Keyboard モジュールは、ターゲット・プラットフォームのBoardDefaults.qmlproject に設定されているMCU.Config.Experimental.vkbScreenWidthから仮想キーボードのスクリーン・サイズに関する情報を取得します。 同じファイルには、選択した SVG 画像に適用して異なるスクリーン・サイズをサポートするためのカスタム SVG 画像スケーリング係数も含まれています。これは組み込みスタイルで使用されます。このスケーリングはカスタムスタイルで使用される画像にも適用されるので、カスタムスタイルで使用される SVG 画像がスケーリング後に正しいサイズになるようにしてください。

フォント・ユニコード・カバレッジ設定

こ の節では、静的 フ ォ ン ト エン ジ ン を使 う 際のfont.unicodeCoverage 設定への取 り 組 み方について解説 し ます。十分なカバレッジを提供する責任は主にアプリケーション開発者側にあります。ROM を最適に消費す る ためには、 選択 し たキーボー ド ス タ イ ルに よ っ て ど の よ う な フ ォ ン ト 構成が用い ら れ、 ど の よ う に用い ら れてい る か を理解す る こ と が重要です。以下のセクションで詳しく説明します。

フォントのUnicodeカバレッジが十分に設定されていないことを示す良い兆候は、アプリケーションがボックスグリフを表示する場合です。他の理由としては、選択されたフォントが要求された unicode 値を持っていないことが考えられます。

MCU.Config.autoGenerateGlyphsも参照してください。

EnterKeyAction.label

アプリケーションでEnterKeyAction.label を使用すると、displayText プロパティがEnterKey に設定されます。キーボード・スタイルが次のコード・スニペットのように displayText にバインディングを持つ場合:

// EnterKeyPanel.qml
Text {
    id: enterKeyText
    text: control.displayText
    font: StyleFonts.enterKeyFont

その場合、アプリケーションに、スタイルで使用されるフォント構成と同等の十分なunicodeCoverageがあることを確認する必要があります(この場合、StyleFonts.enterKeyFont )。そ う し ない と 、EnterKey 内のテ キ ス ト はボ ッ ク グ リ フ し か表示 さ れない可能性があ り ます。

CharacterPreviewDelegate

組込みス タ イルは、 ボ タ ン (KeyPanelDelegate ) と プ レ ビ ュ ーポ ッ プ (CharacterPreviewDelegate ) で同 じ フ ォ ン ト 構成を用い ます。あなたのデザインビジョンに合うなら、例えばプレビューポップアップで 2px 大きめのテキストを使うこともできますが、それはグリフの 2 つのセット(各サイズに 1 つずつ)を束ねることを意味します。デフォルトのスタイルは ROM へのフォントの保存を最適化しようとします。

中国語グリフ

中国語グリフのセットは通常大きくなりうる.Qt Quick Ultralite text_input の例では、テキスト入力フィールドとSelectionListDelegate (仮想キーボード UI で単語候補を表示するのに使われる) で等価なフォント設定を利用し、中国語グリフの 2 セットが束にならないようにしています。これは、アプリケーション開発者が仮想キーボードスタイルの実装に精通することで、ROMを大幅に最適化できる良い例です。

// CustomTextField.qml
readonly property font textFieldFont: Qt.font({
    // static font engine optimization:
    // Using the same font configuration for text input field as used by the keyboard style
    // so we can avoid bundling 2 sets of Chinese glyphs (one for each font configuration).
    // See PinyinSupport.qml
    pixelSize: StyleConstants.wordSuggestionSize * StyleConstants.scaleHint,
      unicodeCoverage: [
       "..."
      ]
})

// PinyinSupport.qml
readonly property font unicodeRegister: Qt.font({
    pixelSize: StyleConstants.wordSuggestionSize * StyleConstants.scaleHint,
    unicodeCoverage: [
        // Chinese characters
        "..."

キーボードレイアウトからのカバレッジ

バンドルされている各レイアウトファイルには、そのレイアウトのユニコードカバレッジを設定する独自のフォントコンフィギュレーションが含まれています。src/virtualkeyboard/layouts/cs/cs_main.qml の例:

readonly property font registerCoverage: Qt.font({
                                           "pixelSize": StyleConstants.keyboardKeySize * StyleConstants.scaleHint,
                                           "unicodeCoverage": ["!,.?abcdefghijklmnopqrstuvwxyzáäåéíóöúýćčďěńřšťůž"],
                                           "unicodeCoverageIncludeUpperCase": true
                                       })

これにはいくつかの利点があります:

  • あるレイアウトが削除された場合、そのレイアウトのグリフは登録されず、アプリケーションにバンドルされません。
  • アプリケーション開発者はキーボードボタンに表示されるグリフを手動で登録する必要がありません。ボタン用の組み込みスタイルは、例のregisterCoverage フォントと同等のフォント設定を使用します。カスタムレイアウトは同じパターンに従うか、それに応じてコードを適合させる必要があります。

アプ リ ケーシ ョ ンのテ キ ス ト 入力フ ィ ール ド が、registerCoverage フ ォ ン ト で定義 さ れてい る も の よ り も ピ ク セルサ イ ズが大 き い等、 異な る フ ォ ン ト 設定を用い る 場合、 開発者は、 こ のテ キ ス ト フ ィ ール ド へのテ キ ス ト 入力に使われ る と 予期 さ れ る レ イ ア ウ ト フ ァ イ ルか ら カ バ レ ーシ ョ ン を コ ピーす る こ と がで き ます。

レ イ ア ウ ト を追加 ・ 変更す る 際には、.fonts フ ァ イ ルか ら 特定の レ イ ア ウ ト フ ァ イ ルに対す る unicode カ バ レ ーシ ョ ン を抽出す る こ と がで き ます。.fonts ファイルの先頭にはcharacters フィールドがあります。このフィールドには、qmltocpp ツールによってqmlファイル内のすべての文字列から検出された一意の文字がソートされて格納されています。

el_main.fonts からel_main.qml ファイル用にcharacters を抽出:

"characters": "!,.?@abcdefghijklmnopqrstuvwxyzàáâãäåçèéêëìíîïòóôõöøùúûüýÿćċčďđĝğġģĩīĺļľŀłńņňœŕřśşšţťŧũūűŷżžΐάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ"

注: .fonts ファイルの内容は公開 API の一部ではありません。

注: 静的フォントエンジンがサポートしていない言語のレイアウトファイルには、フォント登録は存在しません。

アプリケーション用仮想キーボードAPI

QMLタイプは、.qmlファイル中の以下のimportステートメントを使ってアプリケーションにインポートすることができます:

仮想キーボード

からのQML型import QtQuick.VirtualKeyboard

EnterKeyAction

エンターキーをカスタマイズするための付属プロパティを提供します。

InputPanel

仮想キーボードのUIを提供する

仮想キーボードの設定

QMLタイプimport QtQuick.VirtualKeyboard.Settings

VirtualKeyboardSettings

仮想キーボードの設定を提供する

高度な使用例のための仮想キーボードAPI

これらのQMLタイプは、仮想キーボード拡張ベンダー、スタイルプロバイダー、キーボードレイアウトに分類されます。これらはアプリケーションやミドルウェアで使用すべきではありません。

QMLタイプimport QtQuick.VirtualKeyboard

InputContext

入力コンテキストへのアクセスを提供する

InputEngine

ユーザ入力を入力メソッドにマップする

そして、すべての型は

  • import QtQuick.VirtualKeyboard.Components
  • import QtQuick.VirtualKeyboard.Styles

参照

Virtual Keyboardのすべてのモジュールとコンポーネントのリストを表示するには、モジュール概要ページをご覧ください。


詳細はこちら。