C
Qt Quick Ultralite text_input の例
Qt Quick Ultralite でTextInput とInputPanel アイテムを使用する方法を示します。
概要
この例では、TextInput をQt 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.unicodeCoverage ・MCU.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 }
キーボードレイアウトと入力メソッドのヒント
このアプリケーションは、TextInput のinputMethodHints プロパティの値を変えて、Qt Quick Ultralite Virtual KeyboardLayout Types をデモしています。
Qt Quick Ultralite Virtual KeyboardEnter キーを選択することにより、あるCustomTextFieldから次のCustomTextFieldにフォーカスを変更することができます。また、あるCustomTextFieldから他のCustomTextFieldにフォーカスを変更することもできます。
メインレイアウト
メインレイアウトは通常のテキスト入力のためのデフォルトレイアウトです。
一行フィールド
最初のカスタムテキスト入力 One line field を選択すると、Qt Quick Ultralite Virtual Keyboard がメインレイアウトのスクリーン下部からアニメーション表示されます。CustomTextFieldのinputMethodHints プロパティの値はデフォルトのQt.ImhNone です。このテキスト入力フィールドでは、小文字、大文字、数字、記号を使用できます。

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

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

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

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

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

注: Qt Quick Ultralite Virtual Keyboardのレイアウト選択はロケールに基づいています。ロケールが特定のレイアウトタイプを実装していない場合、Qt Quick Ultralite Virtual Keyboardはフォールバックロケールを使用してレイアウトタイプを検索します。詳しくはキーボードレイアウトと 入力ロケールをご覧ください。
ピンインのサポート
このサンプルはピンインをサポートしてもしなくても構築できます。ピンインは簡体字中国語の複雑な入力方法です。詳しくはピンイン・サポートをご覧ください。
Pinyinサポートありでサンプルをビルドすると、メモリフットプリントが増加するため、Pinyinサポートが有効になっている特定のリファレンスボードのみがサポートされています。ピンインをサポートしているターゲット・プラットフォームのリストは以下をご確認ください。
注: qulpinyingeneratorツールを使用して小さい辞書を生成することにより、Pinyinのメモリフットプリントを削減できます。
ピンインをサポートするターゲットプラットフォーム
プロジェクト構造
Cmakeプロジェクトファイル
CMakeLists.txt ファイルには4つのターゲットがある:
text_inputtext_input_retrotext_input_sparktext_input_retro_spark
text_input text_input_retro text_input_spark と は、複雑なスクリプトの言語に対応するtext_input_retro_spark Monotype フォントエンジンに設定されています。詳 し く は、言語 と 表記体系とキーボー ド レ イ ア ウ トを参照 し て く だ さ い。
retro を持つターゲットはレトロな組み込みスタイル用に設定され、他のターゲットはデフォルトの組み込みスタイル用に設定されます。ターゲットはqul_add_targetAPI でSELECTORS オプションを使用してスタイルを設定します。詳細はキーボードスタイルを参照してください。
ターゲットプラットフォームに応じて、CMakeLists.txt はTEXT_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.qmlprojectmc_text_input_pinyin.qmlprojectmcu_text_input_spark.qmlprojectmcu_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.qmlproject はMCU.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 を設定します。各CustomTextField がactive 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 ライセンスの下で利用可能です。
詳細をご覧ください。