C
Qt Quick Ultralite text_input の例
Qt Quick Ultralite における「TextInput 」および「InputPanel 」項目の使用方法を示します。
概要
この例では、TextInput を、Qt Quick Ultralite仮想キーボード(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 フォントエンジンにおけるグリフの利用可能性には影響しません。
アプリケーションでQt Quick のUltralite仮想キーボードを有効にするには、QtQuick.VirtualKeyboardモジュールをインポートし、InputPanel を初期化します。例については 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仮想キーボードのさまざまなレイアウトタイプを実演しています。
Qt Quick Ultralite仮想キーボードのEnter キーを選択することで、あるCustomTextFieldから 次のCustomTextFieldへとフォーカスを移動させることができます。また、フィールドを選択することで、あるCustomTextFieldから任意の他のCustomTextFieldへとフォーカスを移動させることも可能です。
メインレイアウト
メインレイアウトは、通常のテキスト入力用のデフォルトのレイアウトです。
1行フィールド
最初のカスタムテキスト入力フィールド 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 KeyboardのShift ボタンが無効になります。このテキスト入力フィールドでは、数字や記号を含め、大文字のみ入力可能です。

小文字入力フィールド
Lower case field にフォーカスを移すと、Qt Quick Ultralite 仮想キーボードがメインレイアウトを表示します。アプリケーションは、CustomTextFieldのinputMethodHints プロパティの値をQt.ImhLowercaseOnly に設定しており、これによりQt Quick Ultralite 仮想キーボードのShift ボタンが無効化されます。このテキスト入力フィールドでは、数字や記号を含め、小文字のみ入力可能です。

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

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

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

注: Qt Quick Ultralite Virtual Keyboardのレイアウト選択はロケールに基づいています。特定のレイアウトタイプがロケールで実装されていない場合、Qt Quick Ultralite Virtual Keyboardはフォールバックロケールを使用してそのレイアウトタイプを検索します。詳細については、「キーボードレイアウト」および「入力ロケール」を参照してください。
ピンインのサポート
このサンプルは、ピンインのサポートの有無にかかわらずビルドできます。ピンインは、簡体字中国語向けの複雑な入力方式です。詳細については、「ピンインのサポート」を参照してください。
ピンイン対応機能を含めてサンプルをビルドするとメモリ使用量が増加するため、ピンイン対応機能を有効にできるのは特定のリファレンスボードのみです。以下の「ピンイン対応のターゲットプラットフォーム」一覧をご確認ください。
注: qulpinyingeneratorツールを使用して、より小さな辞書を生成することで、ピンイン機能のメモリ使用量を削減できます 。
ピンイン対応のターゲットプラットフォーム
プロジェクト構成
CMakeプロジェクトファイル
CMakeLists.txt ファイルには4つのターゲットがあります:
text_inputtext_input_retrotext_input_sparktext_input_retro_spark
text_input また、text_input_retro のターゲットは、非複雑文字体系の言語をサポートするStaticフォントエンジン用に設定されています。text_input_spark およびtext_input_retro_spark は、複雑文字体系の言語をサポートするMonotypeフォントエンジン用に設定されています。詳細については、「言語と文字体系」および「キーボードレイアウト」を参照してください。
retro を持つターゲットはレトロな組み込みスタイルに設定されており、その他のターゲットはデフォルトの組み込みスタイルに設定されています。ターゲットは、SELECTORS オプションを使用してqul_add_targetAPI でスタイルを設定します。詳細については、「キーボードスタイル」を参照してください。
ターゲットプラットフォームによっては、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プロパティを true に設定し、Pinyin 入力メソッドをサポートするように、同じターゲット向けのアプリケーションを設定します。これらのQmlProjectファイルは、アプリケーションが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.fmp を含んでいます。CMakeLists.txt で 変数が "pinyin" に設定されている場合、 が使用されます。TEXT_INPUT_SELECTORS fonts/+pinyin/TextInputFontmap.fmp
ピンインサポート
PinyinSupport.qml ファイルには、constant font configurations が含まれており、これによりfont.unicodeCoverage が中国語のUnicodeブロックに設定されます。これは、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]
]
})
}Main
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 を設定します。また、onAccepted シグナルハンドラを設定し、各CustomTextField がactive focus を受け取るタイミングを制御します。さらに、EnterKeyAction.actionId を設定して、Qt Quick のUltralite Virtual KeyboardのEnterキーの動作を変更します。
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 は、vkbScreenWidthプロパティに依存して、Qt Quick Ultralite 仮想キーボードの幅を設定します。詳細については、「仮想キーボードのスケーリング」を参照してください。
CustomTextField
この 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 ライセンスの下で利用可能です。
詳細はこちらをご覧ください。