ComboBox QML Type

オプションを選択するためのボタンとポップアップリストを組み合わせたものです。詳細...

Import Statement: import QtQuick.Controls
Inherits:

Control

プロパティ

シグナル

メソッド

詳細説明

ComboBox は、ボタンとポップアップ リストを組み合わせたものです。これは、最小限の画面スペースを取る方法でユーザーにオプションのリストを提示する手段を提供します。

ComboBox にはデータ モデルが入力されます。データ モデルは一般的に JavaScript の配列、ListModel または整数ですが、他のタイプのデータ モデルもサポートされています。

ComboBox {
    model: ["First", "Second", "Third"]
}

編集可能なコンボボックス

コンボボックスはeditable にすることができます。編集可能なコンボボックスは、モデルで利用可能なものに基づいてテキストを自動補完します。

次の例では、accepted シグナルに反応して、編集可能なコンボボックスに内容を追加することを示します。

ComboBox {
    editable: true
    model: ListModel {
        id: model
        ListElement { text: "Banana" }
        ListElement { text: "Apple" }
        ListElement { text: "Coconut" }
    }
    onAccepted: {
        if (find(editText) === -1)
            model.append({text: editText})
    }
}

コンボボックスのポップアップ

デフォルトでは、ComboBox のポップアップの外側をクリックすると、ポップアップが閉じ、そのイベントは積み重ね順位の低いアイテムに伝搬されます。ポップアップを閉じないようにするには、closePolicy を設定します:

    popup.closePolicy: Popup.CloseOnEscape

イベントの伝播を防ぐには、そのmodal プロパティをtrue に設定します:

    popup.modal: true

コンボボックス・モデルの役割

コンボボックスは、modelData ロールを提供する標準データモデルを視覚化できます:

  • ロールが 1 つしかないモデル
  • 名前付きロールを持たないモデル (JavaScript の配列、整数)

複数の名前付きロールを持つモデルを使用する場合、ComboBox はdisplay textdelegate インスタンスに特定のtext role を使用するように設定する必要があります。テキスト・ロールに対応するモデル項目のロールを使用する場合は、valueRole を設定します。その後、currentValue プロパティとindexOfValue() メソッドを使用して、これらの値に関する情報を取得できます。

例えば

ApplicationWindow {
    width: 640
    height: 480
    visible: true

    // Used as an example of a backend - this would usually be
    // e.g. a C++ type exposed to QML.
    QtObject {
        id: backend
        property int modifier
    }

    ComboBox {
        textRole: "text"
        valueRole: "value"
        // When an item is selected, update the backend.
        onActivated: backend.modifier = currentValue
        // Set the initial currentIndex to the value stored in the backend.
        Component.onCompleted: currentIndex = indexOfValue(backend.modifier)
        model: [
            { value: Qt.NoModifier, text: qsTr("No modifier") },
            { value: Qt.ShiftModifier, text: qsTr("Shift") },
            { value: Qt.ControlModifier, text: qsTr("Control") }
        ]
    }
}

注釈 ComboBox に複数の名前付きロールを持つデータ・モデルが割り当てられていますが、textRole が定義されていない場合、ComboBox はそれを視覚化できず、ReferenceError: modelData is not defined をスローします。

Qt Quick Controls のComboBox入力コントロール、およびフォーカス管理のカスタマイズも参照してください

プロパティ ドキュメント

acceptableInput : bool [read-only, since QtQuick.Controls 2.2 (Qt 5.9)]

このプロパティは、コンボボックスが編集可能なテキストフィールドに許容可能なテキストを含むかどうかを保持します。

バリデータが設定されている場合、現在のテキストが最終的な文字列として(中間文字列としてではなく)バリデータに受け入れられる場合のみ、この値はtrue となる。

このプロパティは QtQuick.Controls 2.2 (Qt 5.9) で導入されました。

validator およびacceptedも参照してください


count : int [read-only]

このプロパティは、コンボボックス内の項目数を保持します。


currentIndex : int

このプロパティは、コンボボックス内の現在の項目のインデックスを保持します。

デフォルト値は、count0 の場合は-1 で、それ以外の場合は0 です。

activated()、currentText 、およびhighlightedIndexも参照してください


currentText : string [read-only]

このプロパティは、コンボボックスの現在の項目のテキストを保持する。

currentIndexdisplayTexttextRole 、およびeditTextも参照して ください。


currentValue : var [read-only, since QtQuick.Controls 2.14 (Qt 5.14)]

このプロパティは、コンボボックスの現在の項目の値を保持します。

このプロパティの使用例については、ComboBox Model Roles を参照してください。

このプロパティは、QtQuick.Controls 2.14(Qt 5.14)で導入されました。

currentIndexcurrentTextvalueRoleも参照してください


delegate : Component

このプロパティは、コンボボックスのポップアップで項目を提示するデリゲートを保持します。

デリゲートとしてItemDelegate (または他のAbstractButton 派生物)を使用することをお勧めします。これにより、インタラクションが期待通りに動作し、適切なときにポップアップが自動的に閉じます。他の型をデリゲートとして使用する場合、ポップアップは手動で閉じなければなりません。例えば、MouseArea

delegate: Rectangle {
    // ...
    MouseArea {
        // ...
        onClicked: comboBox.popup.close()
    }
}

ItemDelegateComboBox のカスタマイズも参照してください


displayText : string

このプロパティは、コンボボックスボタンに表示されるテキストを保持します。

デフォルトでは、表示テキストは現在の選択内容を示します。つまり、現在の項目のテキストに従います。しかし、デフォルトの表示テキストはカスタム値で上書きすることができます。

ComboBox {
    currentIndex: 1
    displayText: "Size: " + currentText
    model: ["S", "M", "L"]
}

currentText およびtextRoleも参照してください


down : bool [since QtQuick.Controls 2.2 (Qt 5.9)]

このプロパティは、コンボボックスボタンが視覚的にダウンしているかどうかを保持します。

明示的に設定しない限り、このプロパティはpressed またはpopup.visible のいずれかがtrue のとき、true になります。デフォルト値に戻すには、このプロパティをundefined に設定します。

このプロパティは、QtQuick.Controls 2.2 (Qt 5.9) で導入されました。

pressed およびpopupも参照してください


editText : string [since QtQuick.Controls 2.2 (Qt 5.9)]

このプロパティは、編集可能なコンボボックスのテキストフィールドのテキストを保持します。

このプロパティは QtQuick.Controls 2.2 (Qt 5.9) で導入されました。

editablecurrentTextdisplayTextも参照してください


editable : bool [since QtQuick.Controls 2.2 (Qt 5.9)]

このプロパティは、コンボボックスが編集可能かどうかを保持します。

デフォルト値はfalse です。

このプロパティは QtQuick.Controls 2.2 (Qt 5.9) で導入されました。

validatorも参照してください


flat : bool [since QtQuick.Controls 2.1 (Qt 5.8)]

このプロパティは、コンボボックスボタンがフラットであるかどうかを保持します。

フラットなコンボボックスボタンは、操作されない限り背景を描画しません。通常のコンボボックスと比較して、フラットなコンボボックスは、UIの他の部分から目立たなくする外観を提供します。例えば、コンボボックスをツールバーに配置する場合、コンボボックスをフラットにすることで、ツールボタンのフラットなルックスとマッチしやすくなります。

デフォルト値はfalse です。

このプロパティは、QtQuick.Controls 2.1(Qt 5.8)で導入されました。


highlightedIndex : int [read-only]

このプロパティは、コンボボックスのポップアップリストでハイライトされた項目のインデックスを保持します。

ハイライトされた項目がアクティブになると、ポップアップが閉じられ、currentIndexhighlightedIndex に設定され、ハイライトされた項目がなくなるので、このプロパティの値は-1 にリセットされます。

highlighted() およびcurrentIndexも参照のこと


implicitContentWidthPolicy : enumeration [since QtQuick.Controls 6.0 (Qt 6.0)]

このプロパティは、ComboBoximplicitContentWidth の計算方法を制御する。

ComboBox の幅がテキストを表示するのに十分でない場合、そのテキストは消去される。テキストのどの部分が省略されるかによって、エンドユーザが項目を選択するのが難しくなる可能性があります。ComboBox 、テキストが消えないように十分な幅を確保する効率的な方法は、十分大きいとわかっている幅を設定することです:

width: 300
implicitContentWidthPolicy: ComboBox.ContentItemImplicitWidth

しかし、テキストの大きさは、フォントファミリ、フォントサイズ、翻訳など、多くの要因に依存するため、ハードコードされた値が十分な大きさになるかどうかを知ることは、しばしば不可能です。

implicitContentWidthPolicyは、implicitContentWidthの計算方法を制御する簡単な方法を提供し、その結果、ComboBoximplicitWidth に影響を与え、テキストがエリッドされないことを保証します。

利用可能な値は

定数説明
ContentItemImplicitWidthimplicitContentWidth はデフォルトでcontentItem のものになります。 余分なテキストレイアウトが行われないので、これは最も効率的なオプションです。
WidestTextimplicitContentWidth は、モデルが変わるたびに、与えられたtextRole に対する最大のテキストの暗黙の幅に設定されます。こ のオプシ ョ ンは、 コ ス ト が大き く な る可能性があ る ので、 小 さ いモデルで用い る べ き です。
WidestTextWhenCompletedimplicitContentWidth は、component completion の後に一度だけ、与えられたtextRole に対する最大のテキストの暗黙の幅に設定されます。こ のオプシ ョ ンは、 コ ス ト が大き く な る可能性があ る ので、 よ り 小 さ なモデルで用い る べ き です。

デフォルト値はContentItemImplicitWidth です。

こ のプ ロ パテ ィ はComboBoximplicitWidth にのみ影響を与え る ので、 明示的なwidth を設定 し て も エ ラ イ ド が発生す る 可能性があ り ます。

注: この機能には、contentItemがTextInput から派生した型である必要があります。

注: この機能は、テキストをレイアウトする必要があるため、大規模なモデルや内容が頻繁に更新されるモデルには高価になる可能性があります。

このプロパティは、QtQuick.Controls 6.0(Qt 6.0)で導入されました。


implicitIndicatorHeight : real [read-only, since QtQuick.Controls 2.5 (Qt 5.12)]

このプロパティは、暗黙のインジケータの高さを保持します。

値はindicator ? indicator.implicitHeight : 0 に等しい。

これは通常、implicitContentHeightimplicitBackgroundHeight とともに、implicitHeight を計算するために使用されます。

このプロパティは、QtQuick.Controls 2.5(Qt 5.12)で導入されました。

implicitIndicatorWidthも参照してください


implicitIndicatorWidth : real [read-only, since QtQuick.Controls 2.5 (Qt 5.12)]

このプロパティは、暗黙のインジケータの幅を保持します。

値はindicator ? indicator.implicitWidth : 0 と等しくなります。

これは通常、implicitContentWidth およびimplicitBackgroundWidth とともに、implicitWidth を計算するために使用されます。

このプロパティは、QtQuick.Controls 2.5(Qt 5.12)で導入されました。

implicitIndicatorHeightも参照してください


indicator : Item

このプロパティは、ドロップインジケータ項目を保持します。

コンボボックスのカスタマイズ」も参照してください


inputMethodComposing : bool [read-only, since QtQuick.Controls 2.2 (Qt 5.9)]

このプロパティは、編集可能なコンボボックスが入力メソッドからの部分的なテキスト入力を持つかどうかを保持します。

入力メソッドは、コンボボックスからのマウスイベントまたはキーイベントに依存して、部分テキストを編集またはコミットすることができます。このプロパティは、入力メソッドの正しい動作を妨げる可能性のあるイベントハンドラを無効にするタイミングを決定するために使用できます。

このプロパティは QtQuick.Controls 2.2 (Qt 5.9) で導入されました。


inputMethodHints : flags [since QtQuick.Controls 2.2 (Qt 5.9)]

入力メソッドに、コンボボックスの予想される内容と、その操作方法についてのヒントを提供します。

デフォルト値はQt.ImhNoPredictiveText です。

値はフラグのビット単位の組み合わせか、ヒントが設定されていない場合はQt.ImhNone です。

動作を変更するフラグは以下の通りです:

  • Qt.ImhHiddenText - パスワードを入力するときによく使われるように、文字を隠します。
  • Qt.ImhSensitiveData - 入力されたテキストは、アクティブな入力メソッドによって、予測ユーザー辞書のような永続的なストレージに保存されません。
  • Qt.ImhNoAutoUppercase - 入力メソッドは、文の終了時に自動的に大文字に切り替えようとしません。
  • Qt.ImhPreferNumbers - 数字を優先します(必須ではありません)。
  • Qt.ImhPreferUppercase - 大文字を優先する(必須ではない)。
  • Qt.ImhPreferLowercase - 小文字が優先されます(必須ではありません)。
  • Qt.ImhNoPredictiveText - 入力中に予測入力(辞書検索など)を使用しない。
  • Qt.ImhDate - テキスト・エディターは日付フィールドとして機能します。
  • Qt.ImhTime - テキスト・エディタは時間フィールドとして機能します。

入力を制限するフラグ(排他フラグ)は以下の通りです:

  • Qt.ImhDigitsOnly - 数字のみ入力可能。
  • Qt.ImhFormattedNumbersOnly - 数値入力のみが許可されます。小数点やマイナス記号も含まれます。
  • Qt.ImhUppercaseOnly - 大文字の入力のみが許可されます。
  • Qt.ImhLowercaseOnly - 小文字の入力のみが許可されます。
  • Qt.ImhDialableCharactersOnly - 電話ダイヤルに適した文字のみを許可します。
  • Qt.ImhEmailCharactersOnly - メールアドレスに適した文字のみが許可されます。
  • Qt.ImhUrlCharactersOnly - URL に適した文字のみが許可されます。

マスク:

  • Qt.ImhExclusiveInputMask - 排他的フラグが使用されている場合、このマスクはゼロ以外を返します。

このプロパティは QtQuick.Controls 2.2 (Qt 5.9) で導入されました。


model : model

このプロパティは、コンボボックスのデータを提供するモデルを保持します。

ComboBox {
    textRole: "key"
    model: ListModel {
        ListElement { key: "First"; value: 123 }
        ListElement { key: "Second"; value: 456 }
        ListElement { key: "Third"; value: 789 }
    }
}

textRoleデータモデルも参照してください


このプロパティはポップアップを保持します。

ポップアップは、必要に応じて、手動で開いたり閉じたりすることができます:

onSpecialEvent: comboBox.popup.close()

コンボボックスのカスタマイズ」も参照して ください。


pressed : bool [read-only]

このプロパティは、コンボボックスのボタンが物理的に押されたかどうかを保持します。ボタンはタッチまたはキーイベントによって押されます。

downも参照


selectTextByMouse : bool [since QtQuick.Controls 2.15 (Qt 5.15)]

このプロパティは、編集可能なComboBox のテキストフィールドをマウスで選択できるかどうかを保持します。

デフォルト値はfalse です。

このプロパティは、QtQuick.Controls 2.15(Qt 5.15)で導入されました。


textRole : string

このプロパティは、コンボボックスへの入力に使用されるモデルのロールを保持します。

モデルに複数のロールがある場合、textRole 、どのロールを表示するかを設定することができます。

modelcurrentTextdisplayTextComboBox Model Rolesも参照してください


validator : Validator [since QtQuick.Controls 2.2 (Qt 5.9)]

このプロパティは、編集可能なコンボボックスの入力テキストバリデータを保持します。

バリデータが設定されると、テキストフィールドはtextプロパティを中間状態にする入力のみを受け付ける。accepted シグナルは、Return またはEnter キーが押されたときにテキストが許容可能な状態にある場合にのみ発せられます。

現在サポートしているバリデータはIntValidatorDoubleValidatorRegularExpressionValidator です。バリデータの使用例を以下に示します。0 から10 までの整数をテキストフィールドに入力することができます:

ComboBox {
    model: 10
    editable: true
    validator: IntValidator {
        top: 9
        bottom: 0
    }
}

このプロパティは QtQuick.Controls 2.2 (Qt 5.9) で導入されました。

acceptableInput,accepted,editableも参照してください


valueRole : string [since QtQuick.Controls 2.14 (Qt 5.14)]

このプロパティは、モデル内の各項目に関連付けられた値を格納するために使用されるモデル・ロールを保持します。

このプロパティの使用方法の例については、ComboBox Model Roles を参照してください。

このプロパティは、QtQuick.Controls 2.14(Qt 5.14)で導入されました。

model およびcurrentValueも参照して ください。


シグナル・ドキュメント

[since QtQuick.Controls 2.2 (Qt 5.9)] void accepted()

このシグナルは、editable コンボボックスでReturn またはEnter キーが押されたときに出力されます。

例えば、新しく入力された項目をモデルに追加するために、このシグナルを処理することができます:

ComboBox {
    editable: true
    model: ListModel {
        id: model
        ListElement { text: "Banana" }
        ListElement { text: "Apple" }
        ListElement { text: "Coconut" }
    }
    onAccepted: {
        if (find(editText) === -1)
            model.append({text: editText})
    }
}

シグナルが発せられる前に、その文字列がモデルに存在するかどうかがチェックされます。存在する場合、currentIndex にそのインデックスが、currentText に文字列そのものが設定されます。

シグナルが発信された後、最初のチェックが失敗した場合(つまり、アイテムが存在しなかった場合)、シグナルハンドラによってアイテムが追加されたかどうか、別のチェックが行われます。追加されていれば、currentIndexcurrentText がそれに応じて更新される。そうでなければ、それぞれ-1"" に設定される。

注意 :コンボボックスにvalidator が設定されている場合、シグナルは入力が受け入れ可能な状態のときのみ発せられる。

注: 対応するハンドラはonAccepted です。

このシグナルはQtQuick.Controls 2.2 (Qt 5.9)で導入されました。


void activated(int index)

このシグナルは、index のアイテムがユーザーによってアクティベートされた時に発せられます。

アイテムがアクティブになるのは、ポップアップが開いている間にそのアイテムが選択され、ポップアップが閉じられる(そして、currentIndex が変更される)場合、またはポップアップが閉じられ、コンボボックスがキーボードでナビゲートされ、currentIndex が変更される場合です。currentIndex プロパティはindex に設定されます。

注: 対応するハンドラはonActivated です。

currentIndexも参照


void highlighted(int index)

このシグナルは、ポップアップ・リストのindex の項目がユーザーによってハイライトされたときに発せられます。

highlighted シグナルは、ポップアップが開いていて、アイテムがハイライトされているときにのみ発せられますが、必ずしもactivated である必要はありません。

注意: 対応するハンドラはonHighlighted です。

highlightedIndexも参照してください


メソッドの説明

void decrementCurrentIndex()

コンボボックスの現在のインデックス、またはポップアップリストが表示されている場合はハイライトされたインデックスをデクリメントします。

currentIndex およびhighlightedIndexも参照して ください。


int find(string text, enumeration flags)

指定されたtext のインデックスを返し、マッチしない場合は-1 を返します。

検索の実行方法は、指定されたマッチflags によって定義されます。デフォルトでは、コンボボックスは大文字小文字を区別して完全一致を行います (Qt.MatchExactly)。その他のマッチタイプは、Qt.MatchCaseSensitive フラグが指定されていない限り、大文字小文字を区別しません。

定数説明
Qt.MatchExactly検索語は正確にマッチします (デフォルト)。
Qt.MatchRegularExpression検索語は正規表現としてマッチします。
Qt.MatchWildcard検索語はワイルドカードを使用してマッチします。
Qt.MatchFixedString検索語は固定文字列としてマッチします。
Qt.MatchStartsWith検索語は項目の先頭にマッチします。
Qt.MatchEndsWidth検索語が項目の末尾に一致する。
Qt.MatchContains検索語が項目内に含まれる
Qt.MatchCaseSensitive検索では大文字と小文字が区別されます。

注意: この関数は、ComboBox に対してComponent.completed() が発行された後にのみ使用できる。

例えば

ComboBox {
    model: ListModel {
        ListElement { text: "Banana" }
        ListElement { text: "Apple" }
        ListElement { text: "Coconut" }
    }
    Component.onCompleted: currentIndex = find("Coconut")
}

textRoleも参照


void incrementCurrentIndex()

コンボボックスの現在のインデックス、またはポップアップリストが表示されている場合はハイライトされたインデックスをインクリメントします。

currentIndex およびhighlightedIndex参照して ください。


[since QtQuick.Controls 2.14 (Qt 5.14)] int indexOfValue(object value)

指定されたvalue のインデックスを返し、マッチしない場合は-1 を返します。

このメソッドの使用例については、ComboBox Model Roles を参照してください。

注意: この関数は、ComboBox に対してComponent.completed() が発行された後にのみ使用できます。

このメソッドは QtQuick.Controls 2.14 (Qt 5.14) で導入されました。

find()、currentValuecurrentIndexvalueRolevalueAtも参照してください


[since QtQuick.Controls 2.2 (Qt 5.9)] void selectAll()

コンボボックスの編集可能テキストフィールドのすべてのテキストを選択します。

このメソッドは QtQuick.Controls 2.2 (Qt 5.9) で導入されました。

editTextも参照してください


string textAt(int index)

指定されたindex のテキスト、またはインデックスが範囲外の場合は空の文字列を返します。

注意: この関数は、ComboBox に対してComponent.completed() が発行された後にのみ使用できます。

例えば

ComboBox {
    model: ListModel {
        ListElement { text: "Banana" }
        ListElement { text: "Apple" }
        ListElement { text: "Coconut" }
    }
    onActivated: (index) => { print(textAt(index)) }
}

textRoleも参照


[since QtQuick.Controls 2.14 (Qt 5.14)] var valueAt(int index)

コンボボックスの位置index にある値を返します。

このメソッドは QtQuick.Controls 2.14 (Qt 5.14) で導入されました。

indexOfValue参照して ください。


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