このページでは

C

Qt Quick Ultralite text_input の例

Qt Quick Ultralite でTextInputInputPanel アイテムを使用する方法を示します。

概要

この例では、TextInputQt Quick Ultralite Virtual Keyboard(InputPanel) およびハードウェアキー入力と組み合わせて使用する方法を示します。アプリケーションは6つのカスタムテキスト入力フィールドで構成されています。アプリケーションの内容はフリックできます。

ハードウェア・キー入力をサポートするには、プラットフォーム・ポートにQul::PlatformInterface::handleKeyEvent を実装する必要があります。仮想キーボードからの入力は、プラットフォーム・ポート・レベルでの変更を必要としません。

Qt Quick Ultralite はユーザー入力を動的テ キ ス ト と 見な し ますので、静的フ ォ ン ト エン ジ ンfont.unicodeCoverage プ ロ パテ ィ を使用す る 必要があ り ます。こ の例では、CustomTextField 内の静的フ ォ ン ト エン ジ ンについてfont.unicodeCoverage を定義 し てい ます。静的フォントエンジンはグリフデータを束ねます。MCU.Config.autoGenerateGlyphsと 自動収集カ バ レ ッ ジ に よ っ ては、TextInput 項目で用い ら れてい る フ ォ ン ト に対 し てfont.unicodeCoverage を通 じ て追加カ バ レ ッ シ ョ ン を与え る 必要があ る か も し れません。ユーザー入力に対す る グ リ フ が フ ォ ン ト エン ジ ン で見つか ら ない と き は、 ボ ッ ク ス グ リ フ が表示 さ れます。フ ォ ン ト コ ンパ イ ラは、 自動収集 さ れた も の と 、font.unicodeCoverage を通 じ て さ ま ざ ま な場所に明示的に リ ス ト さ れた も の と の間に重複があ っ て も 、 重な り 合 う グ リ フ デー タ が含まれない よ う に し ます。

Monotype Spark フ ォ ン ト エン ジ ンでは、 グ リ フ が得 ら れ る か ど う かはバ ン ド ル さ れてい る フ ォ ン ト に依存す る こ と に留意 し て く だ さ い。font.unicodeCoverageMCU.Config.autoGenerateGlyphsプ ロ パテ ィ は、 Monotype Spark フ ォ ン ト エン ジ ンでのグ リ フ利用可能性に影響を与え ません。

QtQuick.VirtualKeyboardモジュールをインポートしてInputPanel を初期化すれば、アプリケーションでQt Quick Ultralite Virtual Keyboard を有効にできます。QtQuick.VirtualKeyboard モジュールをインポートして初期化します。 text_input.qmlを参照してください。

InputPanel {
    id: keyboard
    anchors.horizontalCenter: parent.horizontalCenter
    width: StyleConstants.vkbScreenWidth
    y: yPositionWhenHidden
    property real yPositionWhenHidden: parent.height
}

キーボードレイアウトと入力メソッドのヒント

このアプリケーションは、TextInputinputMethodHints プロパティの値を変えて、Qt Quick Ultralite Virtual KeyboardLayout Types をデモしています。

Qt Quick Ultralite Virtual KeyboardEnter キーを選択することにより、あるCustomTextFieldから次のCustomTextFieldにフォーカスを変更することができます。また、あるCustomTextFieldから他のCustomTextFieldにフォーカスを変更することもできます。

メインレイアウト

メインレイアウトは通常のテキスト入力のためのデフォルトレイアウトです。

一行フィールド

最初のカスタムテキスト入力 One line field を選択すると、Qt Quick Ultralite Virtual Keyboard がメインレイアウトのスクリーン下部からアニメーション表示されます。CustomTextFieldinputMethodHints プロパティの値はデフォルトのQt.ImhNone です。このテキスト入力フィールドでは、小文字、大文字、数字、記号を使用できます。

大文字フィールド

フォーカスをUpper case field に変更すると、Qt Quick Ultralite Virtual Keyboard はメインレイアウトを表示します。アプリケーションはCustomTextFieldinputMethodHints プロパティの値をQt.ImUppercaseOnly に設定し、Qt Quick Ultralite Virtual KeyboardShift ボタンを無効にします。このテキスト入力フィールドは数字と記号を含む大文字のみを許可します。

小文字フィールド

フォーカスをLower case field に変更すると、Qt Quick Ultralite Virtual Keyboard はメインレイアウトを表示します。アプリケーションはCustomTextFieldinputMethodHints プロパティの値をQt.ImhLowercaseOnly に設定し、Qt Quick Ultralite Virtual KeyboardShift ボタンを無効にします。このテキスト入力フィールドでは、数字と記号を含む小文字のみを使用できます。

ダイヤルパッドレイアウト

フォーカスをPhone number field に変更すると、Qt Quick Ultralite Virtual Keyboard は、CustomTextFieldinputMethodHints プロパティの値をQt.ImhDialableCharactersOnly に設定することでアプリケーションが有効にするダイヤルパッド レイアウトを表示します。

書式付き数字レイアウト

フォーカスをFormatted number field に変更すると、Qt Quick Ultralite Virtual Keyboard は、CustomTextFieldinputMethodHints プロパティの値をQt.ImhFormattedNumbersOnly に設定することでアプリケーションが有効にする数字レイアウトを表示します。

数字のみのレイアウト

フォーカスをDigit only field に変更すると、Qt Quick Ultralite Virtual Keyboard は、CustomTextFieldinputMethodHints プロパティの値をQt.ImhDigitsOnly に設定することでアプリケーションが有効にする数字のみのレイアウトを表示します。

注: Qt Quick Ultralite Virtual Keyboardのレイアウト選択はロケールに基づいています。ロケールが特定のレイアウトタイプを実装していない場合、Qt Quick Ultralite Virtual Keyboardはフォールバックロケールを使用してレイアウトタイプを検索します。詳しくはキーボードレイアウトと 入力ロケールをご覧ください。

ピンインのサポート

このサンプルはピンインをサポートしてもしなくても構築できます。ピンインは簡体字中国語の複雑な入力方法です。詳しくはピンイン・サポートをご覧ください。

Pinyinサポートありでサンプルをビルドすると、メモリフットプリントが増加するため、Pinyinサポートが有効になっている特定のリファレンスボードのみがサポートされています。ピンインをサポートしているターゲット・プラットフォームのリストは以下をご確認ください。

注: qulpinyingeneratorツールを使用して小さい辞書を生成することにより、Pinyinのメモリフットプリントを削減できます。

ピンインをサポートするターゲットプラットフォーム

プロジェクト構造

Cmakeプロジェクトファイル

CMakeLists.txt ファイルには4つのターゲットがある:

  • text_input
  • text_input_retro
  • text_input_spark
  • text_input_retro_spark

text_input text_input_retro text_input_spark と は、複雑なスクリプトの言語に対応するtext_input_retro_spark Monotype フォントエンジンに設定されています。詳 し く は、言語 と 表記体系キーボー ド レ イ ア ウ トを参照 し て く だ さ い。

retro を持つターゲットはレトロな組み込みスタイル用に設定され、他のターゲットはデフォルトの組み込みスタイル用に設定されます。ターゲットはqul_add_targetAPI でSELECTORS オプションを使用してスタイルを設定します。詳細はキーボードスタイルを参照してください。

ターゲットプラットフォームに応じて、CMakeLists.txtTEXT_INPUT_SELECTORS 変数を"pinyin" に設定し、all ターゲットがPinyin 入力メソッドをサポートするように設定します。

if (QUL_PLATFORM MATCHES "^ek-ra" OR QUL_PLATFORM MATCHES "^rh850")
    # RA8D1 and RH850 do not have enough space for Pinyin support
    set(TEXT_INPUT_SELECTORS "")
QmlProjectファイル

QmlProjectファイルには、必要なQmlファイル、フォントエンジンの設定、フォントファイル、Pinyin サポート設定が含まれています。

text_input exampleには4つのQmlProjectファイルが含まれています:

  • mcu_text_input.qmlproject
  • mc_text_input_pinyin.qmlproject
  • mcu_text_input_spark.qmlproject
  • mcu_text_input_pinyin_spark.qmlproject

mcu_text_input.qmlproject text_input text_input_retro mcu_text_input_pinyin.qmlproject は、MCU.Config.vkbPinyinSupportプロパティを に設定し、 入力メソッドをサポートする同じターゲットに対してアプリケーションを設定します。これらのQmlProjectファイルは、true Pinyin Staticフォントエンジンを使用するようにアプリケーションを構成し、 フォントファイル を含みます。TrueType fonts/NotoSansSC-Regular.ttf

mcu_text_input_spark.qmlproject text_input_spark text_input_retro_spark mcu_text_input_pinyin_spark.qmlprojectMCU.Config.vkbPinyinSupportプロパティを に設定し、 入力メソッドをサポートする同じターゲットに対してアプリケーションを設定します。こ れ ら の QmlProject フ ァ イ ルは、 アプ リ ケーシ ョ ンがtrue Pinyin Monotype フ ォ ン ト エン ジ ン を使 う よ う 設定 し 、フ ォ ン ト マ ッ プフ ァ イ ル を含めます。fonts/TextInputFontmap.fmpCMakeLists.txtで TEXT_INPUT_SELECTORS 変数が "pinyin "に設定されている場合、 が使用されます。fonts/+pinyin/TextInputFontmap.fmp

ピンインのサポート

PinyinSupport.qml ファイルにはconstant font configurations があり、font.unicodeCoverage を中国語のユニコードブロックに設定します。これは、TextInput で中国語の文字を表示するためにStatic フォントエンジンが必要とするものです。

この Qml ファイルが含まれているのはmcu_text_input_pinyin.qmlproject だけです。

import QtQuick
import QtQuick.VirtualKeyboard

QtObject {
    readonly property font unicodeRegister: Qt.font({
        pixelSize: StyleConstants.wordSuggestionSize * StyleConstants.scaleHint,
        unicodeCoverage: [
            // Chinese characters
            "\u4F46\u4F69\u4F73\u4F7F\u5047\u504F\u5065\u5076\u5077\u508D\u50BB\u50CF\u5242\u52BF\u52D2\u52E4\u54FC\u5524\u5594\u559C\u559D\u55D3\u55E8\u55FD\u561B\u578B\u57AB\u57C3\u57DF\u57F9\u57FA\u5815\u582A\u5835\u586B\u58A8\u58C1\u58E4\u5A46\u5A5A\u5A74\u5A92\u5AB3\u5AC1\u5AC2\u5AE9\u5C24\u5C5E\u5C65\u5C71\u5C81\u5C82\u5CF0\u5CFB\u5D07\u5D14\u5D1B\u5DDD\u5DDE\u5E26\u5E2D\u5E2E\u5E45\u5E55\u5EB7\u5EC9\u5ECA\u5ED6\u5F39\u5F3A\u5F62\u5FA1\u5FCD\u5FE0\u5FF5\u603B\u6094\u6101\u613F\u6155\u6170\u618B\u61D2\u622A\u633A\u636E\u6377\u6380\u63E1\u63ED\u63F4\u642C\u642D\u643A\u6469\u6478\u6491\u6492\u64BC\u64C5\u64CD\u64CE\u64E6\u652F\u6559\u65A4\u65D7\u662F\u664B\u6682\u66A7\u66A8\u66B4\u66DD\u67AA\u67AB\u67B6\u67DC\u67E5\u6821\u6876\u68A6\u68AF\u68B0\u68C0\u68D2\u68EE\u6905\u695A\u699C\u69DB\u69FD\u6A21\u6A2A\u6B32\u6B8A\u6B8B\u6B96\u6BB5\u6BEB\u6C1B\u6C57\u6C7D\u6C88\u6C89\u6CAA\u6CAB\u6D0B\u6D32\u6D9B\u6DD8\u6DE1\u6E05\u6E10\u6E17\u6E20\u6E21\u6E90\u6EAA\u6EDA\u6EF4\u6F20\u6F2B\u6F47\u6F6E\u6F84\u6FA1\u6FB3\u6FC0\u704C\u707E\u707F\u7126\u714C\u716E\u718A\u71AC\u71C3\u71D5\u71E5\u7206\u7272\u7279\u727A\u72C2\u72D0\u72D7\u72E0\u730E\u731B\u731C\u739B\u73BB\u73CD\u73E0\u73ED\u7433\u7434\u745E\u7470\u7483\u74DC\u74E6\u74F6\u74F7\u7528\u7529\u7545\u754C\u7559\u7574\u7586\u764C\u76AE\u771F\u7720\u7747\u7750\u778E\u77DB\u780D\u7840\u7855\u789F\u78A7\u78B0\u78C1\u78E8\u7948\u7956\u795D\u795E\u7977\u7978\u7981\u798F\u79DF\u79FB\u7A1A\u7A33\u7A3F\u7A46\u7ACB\u7AEF\u7AF9\u7B49\u7B97\u7BA1\u7BC7\u7BEE\u7C4D\u7C73\u7C7B\u7C89\u7CA5\u7CAE\u7CCA\u7CFB\u7E41\u7EF4\u7F06\u7F29\u7F62\u7FBD\u7FC5\u7FD4\u7FE0\u8017\u806A\u8131\u8170\u818A\u819C\u81A8\u81C2\u81E3\u821E\u8292\u829D\u82E5\u82E6\u82F1\u82F9\u8303\u8304\u832B\u8336\u8349\u8350\u836F\u8377\u8389\u839E\u83DC\u83E9\u83F2\u8404\u841D\u843D\u848B\u8499\u84B8\u84C4\u84DD\u8513\u8521\u852B\u852C\u853D\u8549\u859B\u85AA\u85CF\u865A\u866B\u868A\u86EE\u8702\u878D\u8840\u884C\u8857\u8870\u8881\u888B\u8896\u88E4\u88F8\u88F9\u89D2\u8A00\u8A89\u8B66\u8C46\u8C61\u8C6A\u8C6B\u8C8C\u8DB3\u8DC3\u8DE8\u8E0F\u8E22\u8E29\u8E2A\u8E48\u8E6D\u8EAB\u8EB2\u8EBA\u8FB1\u9065\u906D\u9075\u907F\u9080\u9093\u90DD\u90FD\u9119\u915D\u916C\u917F\u9192\u9274\u946B\u9488\u94DC\u94DD\u94ED\u9519\u952E\u953B\u9547\u955C\u957F\u961F\u9676\u9677\u9686\u969C\u96A7\u96B6\u96F6\u96F7\u9732\u9769\u978B\u98CE\u9910\u99A8\u9AD8\u9C9C\u9E2D\u9E3F\u9E4F\u9E70\u9EA6\u9EC4\u9ED8\u9F13\u9F20\u9F3B\u9F50",
            [0x4E00, 0x4E66], [0x4E70, 0x4E73], [0x4E86, 0x4EB2], [0x4EBA, 0x4ED9],
            [0x4EE3, 0x4F01], [0x4F0A, 0x4F3C], [0x4F4D, 0x4F62], [0x4F88, 0x4F8B],
            [0x4F9B, 0x4FB5], [0x4FBF, 0x4FCA], [0x4FD7, 0x4FE1], [0x4FE9, 0x4FF1],
            [0x4FFA, 0x4FFE], [0x500D, 0x5012], [0x5019, 0x5021], [0x503A, 0x503E],
            [0x505A, 0x505C], [0x507F, 0x5085], [0x50A8, 0x50B2], [0x513F, 0x515A],
            [0x5165, 0x517D], [0x5185, 0x5192], [0x5199, 0x51A0], [0x51AC, 0x51B7],
            [0x51C0, 0x51D1], [0x51DD, 0x51E4], [0x51ED, 0x520A], [0x5212, 0x523B],
            [0x524D, 0x5251], [0x5267, 0x5272], [0x529B, 0x52B3], [0x52C7, 0x52C9],
            [0x52FE, 0x5306], [0x5316, 0x5319], [0x5339, 0x5378], [0x5382, 0x538C],
            [0x5395, 0x539F], [0x53A6, 0x53A8], [0x53BB, 0x53DB], [0x53E3, 0x541B],
            [0x5426, 0x5450], [0x5457, 0x5468], [0x5473, 0x5475], [0x547C, 0x5481],
            [0x548B, 0x5496], [0x54A7, 0x54B8], [0x54C0, 0x54D2], [0x54DF, 0x54F2],
            [0x5507, 0x5509], [0x5510, 0x5514], [0x552E, 0x5531], [0x5543, 0x554A],
            [0x5561, 0x5566], [0x5582, 0x558A], [0x55B7, 0x55BD], [0x55EF, 0x55F2],
            [0x5609, 0x560E], [0x5632, 0x5634], [0x563B, 0x563F], [0x5662, 0x566A],
            [0x5676, 0x567B], [0x56DB, 0x56FE], [0x5706, 0x5708], [0x571F, 0x5728],
            [0x5730, 0x5733], [0x573A, 0x5740], [0x5747, 0x5766], [0x5782, 0x5784],
            [0x57CB, 0x57CE], [0x5802, 0x5806], [0x5851, 0x585E], [0x5883, 0x5885],
            [0x5899, 0x589F], [0x58EB, 0x58F3], [0x5904, 0x590F], [0x5916, 0x591F],
            [0x5927, 0x593A], [0x5947, 0x5957], [0x5960, 0x5965], [0x5973, 0x599E],
            [0x59A8, 0x59BB], [0x59C6, 0x59DC], [0x59E8, 0x59EC], [0x59FB, 0x5A03],
            [0x5A18, 0x5A1F], [0x5A31, 0x5A36], [0x5AC9, 0x5ACC], [0x5B50, 0x5B69],
            [0x5B81, 0x5B8F], [0x5B97, 0x5BAB], [0x5BB3, 0x5BD3], [0x5BDD, 0x5BDF],
            [0x5BF8, 0x5C1D], [0x5C2C, 0x5C55], [0x5C97, 0x5C9B], [0x5CA9, 0x5CB8],
            [0x5D29, 0x5D2D], [0x5DE5, 0x5DF4], [0x5DFE, 0x5E1D], [0x5E38, 0x5E3D],
            [0x5E72, 0x5E9F], [0x5EA6, 0x5EAD], [0x5EF6, 0x5F15], [0x5F1F, 0x5F26],
            [0x5F2F, 0x5F31], [0x5F52, 0x5F55], [0x5F69, 0x5F71], [0x5F79, 0x5F98],
            [0x5FAA, 0x5FAE], [0x5FB7, 0x5FC6], [0x5FD7, 0x5FD9], [0x5FE7, 0x5FEB],
            [0x5FFD, 0x6001], [0x600E, 0x602A], [0x604B, 0x6052], [0x6062, 0x607C],
            [0x6084, 0x608D], [0x609F, 0x60B2], [0x60C5, 0x60CA], [0x60D1, 0x60D5],
            [0x60DC, 0x60E0], [0x60E7, 0x60F9], [0x6108, 0x610F], [0x611F, 0x6124],
            [0x6148, 0x614E], [0x6162, 0x6168], [0x61BE, 0x61C2], [0x620F, 0x621A],
            [0x6234, 0x6237], [0x623F, 0x6258], [0x6263, 0x628A], [0x6291, 0x629B],
            [0x62A2, 0x62BD], [0x62C5, 0x6309], [0x6311, 0x6316], [0x6321, 0x632F],
            [0x6349, 0x6355], [0x635E, 0x6367], [0x6388, 0x6398], [0x63A2, 0x63AA],
            [0x63CF, 0x63D2], [0x641C, 0x641E], [0x6444, 0x6447], [0x6454, 0x6458],
            [0x649E, 0x64A4], [0x64AD, 0x64B0], [0x6536, 0x6551], [0x6562, 0x6574],
            [0x6587, 0x659C], [0x65AD, 0x65B0], [0x65B9, 0x65CF], [0x65E0, 0x65ED],
            [0x65F6, 0x65FA], [0x6602, 0x6614], [0x661F, 0x6628], [0x663E, 0x6643],
            [0x6652, 0x665A], [0x6668, 0x667A], [0x6691, 0x6697], [0x66F0, 0x6700],
            [0x6708, 0x670D], [0x6717, 0x671F], [0x6728, 0x6746], [0x674E, 0x6751],
            [0x675C, 0x6770], [0x677E, 0x6784], [0x6790, 0x679D], [0x67D0, 0x67D4],
            [0x67EF, 0x67F3], [0x6807, 0x6811], [0x6837, 0x6851], [0x6863, 0x6865],
            [0x6881, 0x6885], [0x68C9, 0x68CB], [0x690D, 0x6912], [0x697C, 0x6982],
            [0x6B20, 0x6B27], [0x6B3A, 0x6B3E], [0x6B49, 0x6B4C], [0x6B62, 0x6B6A],
            [0x6B79, 0x6B7B], [0x6BBF, 0x6BC1], [0x6BCD, 0x6BDB], [0x6C0F, 0x6C14],
            [0x6C34, 0x6C38], [0x6C41, 0x6C49], [0x6C5F, 0x6C70], [0x6C99, 0x6CA1],
            [0x6CB3, 0x6CCC], [0x6CD5, 0x6CF3], [0x6CFC, 0x6D01], [0x6D12, 0x6D1E],
            [0x6D25, 0x6D2A], [0x6D3B, 0x6D5C], [0x6D66, 0x6D77], [0x6D82, 0x6D89],
            [0x6DA6, 0x6DA8], [0x6DAF, 0x6DB5], [0x6DEB, 0x6DFB], [0x6E29, 0x6E38],
            [0x6E56, 0x6E58], [0x6E7E, 0x6E83], [0x6ECB, 0x6ED1], [0x6EE1, 0x6EE8],
            [0x6F02, 0x6F06], [0x6F0F, 0x6F14], [0x6F58, 0x6F5C], [0x706B, 0x7075],
            [0x708E, 0x7092], [0x70AB, 0x70AE], [0x70B8, 0x70C8], [0x70DF, 0x70ED],
            [0x7130, 0x7136], [0x7164, 0x7167], [0x7199, 0x719F], [0x722A, 0x723D],
            [0x7247, 0x724C], [0x7259, 0x7269], [0x72AC, 0x72AF], [0x72B6, 0x72B9],
            [0x72EC, 0x72F1], [0x72F8, 0x72FC], [0x732A, 0x7334], [0x7384, 0x738B],
            [0x73A9, 0x73B2], [0x7403, 0x7406], [0x7518, 0x751F], [0x7530, 0x753B],
            [0x7565, 0x756A], [0x7591, 0x7597], [0x75AB, 0x75B2], [0x75BC, 0x75BE],
            [0x75C5, 0x75C7], [0x75D2, 0x75DB], [0x75F4, 0x75F9], [0x7624, 0x7626],
            [0x767B, 0x7687], [0x76C6, 0x76DF], [0x76EE, 0x7701], [0x7709, 0x770B],
            [0x773C, 0x7740], [0x775B, 0x7763], [0x77A7, 0x77AC], [0x77E3, 0x77F3],
            [0x77FF, 0x7801], [0x7814, 0x7816], [0x7834, 0x7838], [0x786C, 0x786E],
            [0x788C, 0x7897], [0x793A, 0x793E], [0x7965, 0x7968], [0x79BB, 0x79C1],
            [0x79CB, 0x79D8], [0x79E6, 0x79F0], [0x7A0B, 0x7A0E], [0x7A74, 0x7A81],
            [0x7A97, 0x7A9D], [0x7AD9, 0x7AE5], [0x7B11, 0x7B14], [0x7B26, 0x7B2C],
            [0x7B51, 0x7B5B], [0x7B79, 0x7B80], [0x7BAD, 0x7BB1], [0x7C92, 0x7C98],
            [0x7CB9, 0x7CBE], [0x7CD5, 0x7CDF], [0x7D20, 0x7D2F], [0x7EA0, 0x7EDF],
            [0x7EE7, 0x7EED], [0x7EFC, 0x7EFF], [0x7F13, 0x7F20], [0x7F34, 0x7F3A],
            [0x7F51, 0x7F5A], [0x7F6A, 0x7F72], [0x7F8A, 0x7F8E], [0x7F9E, 0x7FA4],
            [0x7FFB, 0x8005], [0x800C, 0x8010], [0x8033, 0x803D], [0x804A, 0x804C],
            [0x8054, 0x805A], [0x8083, 0x808C], [0x8096, 0x80B2], [0x80BA, 0x80CE],
            [0x80D6, 0x80E1], [0x80F3, 0x8106], [0x810F, 0x811A], [0x8138, 0x813E],
            [0x814A, 0x8150], [0x8179, 0x8180], [0x81EA, 0x81F4], [0x8205, 0x8214],
            [0x822A, 0x822C], [0x8236, 0x8239], [0x826F, 0x8273], [0x827A, 0x8282],
            [0x82AC, 0x82B3], [0x82CD, 0x82D7], [0x8361, 0x8363], [0x83AB, 0x83B7],
            [0x83CA, 0x83CC], [0x840C, 0x840E], [0x8425, 0x8428], [0x8457, 0x8463],
            [0x8584, 0x8587], [0x864E, 0x8651], [0x8679, 0x8682], [0x86C7, 0x86CB],
            [0x86D9, 0x86DB], [0x8718, 0x871C], [0x8774, 0x8776], [0x8861, 0x8868],
            [0x88AB, 0x88AD], [0x88C1, 0x88C5], [0x88D5, 0x88D9], [0x897F, 0x8986],
            [0x89C1, 0x89C9], [0x89E3, 0x89E6], [0x8BA1, 0x8BE6], [0x8BED, 0x8C13],
            [0x8C22, 0x8C2D], [0x8C34, 0x8C37], [0x8D1D, 0x8D44], [0x8D4B, 0x8D64],
            [0x8D70, 0x8D77], [0x8D81, 0x8D8B], [0x8D9F, 0x8DA3], [0x8DCC, 0x8DD1],
            [0x8DDD, 0x8DDF], [0x8DEF, 0x8DF5], [0x8F66, 0x8F74], [0x8F7B, 0x8F89],
            [0x8F90, 0x8F93], [0x8F9B, 0x8FA9], [0x8FB9, 0x8FDF], [0x8FEA, 0x8FF0],
            [0x8FF7, 0x9022], [0x9038, 0x9057], [0x90A3, 0x90C1], [0x90CA, 0x90D1],
            [0x90E8, 0x90ED], [0x914D, 0x9152], [0x9176, 0x9178], [0x9189, 0x918B],
            [0x91C7, 0x91D1], [0x9493, 0x94A5], [0x94AE, 0x94B1], [0x94BB, 0x94C3],
            [0x94F6, 0x950B], [0x9521, 0x9526], [0x95E8, 0x9605], [0x9610, 0x9614],
            [0x9631, 0x9655], [0x9662, 0x966A], [0x968F, 0x9694], [0x96BE, 0x96C6],
            [0x96E8, 0x96EA], [0x96FE, 0x9700], [0x9707, 0x970D], [0x971C, 0x971E],
            [0x9752, 0x9762], [0x97E6, 0x97E9], [0x97F3, 0x97F5], [0x9875, 0x9888],
            [0x9891, 0x989D], [0x98D8, 0x98DF], [0x996D, 0x9972], [0x997C, 0x997F],
            [0x9986, 0x9988], [0x9992, 0x9999], [0x9A6C, 0x9A84], [0x9A8C, 0x9A9A],
            [0x9AA4, 0x9AA8], [0x9B3C, 0x9B45], [0x9B4F, 0x9B54], [0x9C7C, 0x9C81],
            [0x9E1F, 0x9E23], [0x9EBB, 0x9EBD], [0x9ECE, 0x9ED1], [0x9F7F, 0x9F84],
            [0x9F99, 0x9F9F]
        ]
    })
}
メイン

text_input.qml ファイルはアプリケーションのUIを定義します。これには6つのCustomTextField項目が含まれています。

CustomTextField {
    width: parent.width
    placeholderText: "One line field"
    enterKeyAction: EnterKeyAction.Next
    onAccepted: upperCaseField.focus = true
}
CustomTextField {
    // ### FIXME - the ShiftKey in default style should get
    // StyleConfig.capsLockKeyAccentColor color. But state change
    // for some reason is not triggered in ShiftKeyPanel.qml, even
    // when InputContext.capsLockActive == true. Bug in 'state'
    // handling system?
    id: upperCaseField
    width: parent.width
    placeholderText: "Upper case field"
    inputMethodHints: Qt.ImhUppercaseOnly
    enterKeyAction: EnterKeyAction.Next
    onAccepted: lowerCaseField.focus = true
}
CustomTextField {
    id: lowerCaseField
    width: parent.width
    placeholderText: "Lower case field"
    inputMethodHints: Qt.ImhLowercaseOnly
    enterKeyAction: EnterKeyAction.Next
    onAccepted: phoneNumberField.focus = true
}
CustomTextField {
    id: phoneNumberField
    width: parent.width
    placeholderText: "Phone number field"
    inputMethodHints: Qt.ImhDialableCharactersOnly
    enterKeyAction: EnterKeyAction.Next
    onAccepted: formattedNumberField.focus = true
}
CustomTextField {
    id: formattedNumberField
    width: parent.width
    placeholderText: "Formatted number field"
    inputMethodHints: Qt.ImhFormattedNumbersOnly
    enterKeyAction: EnterKeyAction.Next
    onAccepted: digitsField.focus = true
}
CustomTextField {
    id: digitsField
    width: parent.width
    placeholderText: "Digits only field"
    inputMethodHints: Qt.ImhDigitsOnly
    enterKeyAction: EnterKeyAction.Search
    enterKeyEnabled: digitsField.text.length > 5
    onAccepted: {
        textAreaTextItem.text = textAreaTextItem.text + "\n" + digitsField.text
        digitsField.clear()
    }

それぞれのCustomTextField は異なるinputMethodHints を設定します。各CustomTextFieldactive focus を取得するタイミングを制御するためにonAccepted シグナルハンドラを設定します。また、Qt Quick Ultralite Virtual Keyboard のエンターキーを変更するためにEnterKeyAction.actionId を設定します。

text_input.qml QtQuick.VirtualKeyboardモジュールをインポートし、InputPanel を初期化して、アプリケーションでQt Quick Ultralite Virtual Keyboard を有効にします。

InputPanel {
    id: keyboard
    anchors.horizontalCenter: parent.horizontalCenter
    width: StyleConstants.vkbScreenWidth
    y: yPositionWhenHidden
    property real yPositionWhenHidden: parent.height
}

注意: Qt Quick Ultralite は、Qt Quick Ultralite Virtual Keyboard の幅を設定するvkbScreenWidthプロパティに依存しています。詳細は仮想キーボードのスケーリングを参照してください。

カスタムテキストフィールド

この Qml コンポーネントはMainで使用され、アプリケーション内のTextInput Qml アイテムとそのText 子 Qml アイテムのインターフェイスを定義します。

import QtQuick
import QtQuick.VirtualKeyboard

Rectangle {
    id: root

    height: xGlyphMetrics.height * 2.4
    Text {
        id: xGlyphMetrics
        font: textFieldFont
        text: "X"
        visible: false
    }

    property string placeholderText: "placeholder"
    property int enterKeyAction: EnterKeyAction.None
    property bool enterKeyEnabled: true
    property bool focus: false

    property alias inputMethodHints: control.inputMethodHints
    property alias text: control.text

    signal accepted

    function clear() { control.clear() }

    color: control.activeFocus ? "darkblue" : "lightgrey"

    onFocusChanged: {
        if (root.focus)
            control.forceActiveFocus()
    }

    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: [
           " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~¡¢£¥§ª«®·º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÑÒÓÔÕÖרÙÚÛÜÝßàáâãäåæçèéêëìíîïñòóôõö÷øùúûüýÿĂ㥹ĆćĊċČčĎďĐđĒēĖėĘęĚěĜĝĞğĠġĢģĨĩĪīĮįıĹĺĻļĽľĿŀŁłŃńŅņŇňŐőŒœŔŕŘřŚśŞşŠšŢţŤťŦŧŨũŪūŮůŰűŶŷŸŹźŻżŽžƠơƯưǼǽǾǿȘșȚț́̈ΆΈΉΊΌΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώЁЂЄЅІЇЈЉЊЋЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяёђєѕіїјљњћџҐґẠạẢảẤấẦầẨẩẪẫẬậẮắẰằẲẳẴẵẶặẸẹẺẻẼẽẾếỀềỂểỄễỆệỈỉỊịỌọỎỏỐốỒồỔổỖỗỘộỚớỜờỞởỠỡỢợỤụỦủỨứỪừỬửỮữỰựỲỳỴỵỶỷỸỹ—“”…₫€₴₺™⅓⅞←↑→↓√␣■□◆◇○●★☆⚙、。〈〉《》「」『』【】〔〕!(),./:;?\~¥"
          ]
    })

    Rectangle {
        id: background
        color: "#E3F2FD"
        anchors.fill: parent
        anchors.margins: 2 // Padding inside the border
    }

    TextInput {
        id: control
        anchors.fill: background
        anchors.margins: 4 // Keep padding between text and background

        font: textFieldFont
        onAccepted: {
            root.accepted()
        }

        EnterKeyAction.actionId: enterKeyAction
        EnterKeyAction.enabled: enterKeyEnabled

        Text {
            anchors.centerIn: parent
            font: textFieldFont
            text: placeholderText
            opacity: 0.2
            visible: control.text.length === 0
        }
    }
}

特定の Qt ライセンスの下で利用可能です。
詳細をご覧ください。