Repeater QML Type

提供されたモデルを使用して、いくつかのItemベースのコンポーネントをインスタンス化します。詳細...

Import Statement: import QtQuick
Inherits:

Item

プロパティ

信号

方法

詳細説明

リピーター型は、多数の類似したアイテムを作成するために使用されます。他のビュー・タイプと同様に、リピータはmodeldelegate を持ちます。モデルの各エントリに対して、デリゲートはモデルからのデータでシードされたコンテキストでインスタンス化されます。リピータによって作成された複数のデリゲート項目を視覚的に配置するために、リピータ項目は通常、RowColumn などのポジショナ型で囲まれます。

次のリピータは、Row 内にRectangle アイテムのインスタンスを 3 つ作成します:

import QtQuick

Row {
    Repeater {
        model: 3
        Rectangle {
            width: 100; height: 40
            border.width: 1
            color: "yellow"
        }
    }
}

リピータのmodel は、サポートされているデータ・モデルのどれでもかまいません。さらに、他のビューのデリゲートと同様に、リピータのデリゲートは、デリゲートに関連するモデル・データだけでなく、リピータ内のインデックスにもアクセスできます。詳細については、delegate プロパティのドキュメントを参照してください。

リピータによってインスタンス化されたアイテムは、リピータの親の子として順番に挿入されます。挿入は、親のスタッキングリストにおけるリピーターの位置の直後から始まります。これにより、リピーターをレイアウト内で使用することができます。例えば、以下のリピーターのアイテムは、赤い四角形と青い四角形の間にスタックされています:

Row {
    Rectangle { width: 10; height: 20; color: "red" }
    Repeater {
        model: 10
        Rectangle { width: 20; height: 20; radius: 10; color: "green" }
    }
    Rectangle { width: 10; height: 20; color: "blue" }
}

注: リピータのアイテムは、それがインスタンス化するすべてのアイテムを所有します。リピータが作成したアイテムを削除したり、動的に破棄したりすると、予測できない動作になります。

リピータを使用する際の注意点

リピーター型は、リピーターが最初に作成されるときに、すべてのデリゲート項目を作成します。これは、デリゲート項目の数が多く、すべての項目を同時に表示する必要がない場合、非効率的な場合があります。このような場合は、ListView のような他のビュータイプを使用するか(ビューにスクロールされたときにのみデリゲートアイテムを作成します)、Dynamic Object Creation のメソッドを使用して、必要なときにアイテムを作成することを検討してください。

また、RepeaterはItem-ベースであり、Item-派生オブジェクトのみを繰り返すことができることに注意してください。例えば、QtObject を繰り返すことはできません:

// bad code:
Item {
    // Can't repeat QtObject as it doesn't derive from Item.
    Repeater {
        model: 10
        QtObject {}
    }
}

プロパティの説明

count : int [read-only]

このプロパティーは、モデル内のアイテムの数を保持します。

: リピーターがデリゲートをインスタンス化している途中であったり、デリゲートのセットアップに誤りがある場合、 count によって報告されるモデル内のアイテムの数は、作成されたデリゲートの数と異なる場合があります。


delegate : Component [default]

デリゲートは、リピーターによってインスタンス化された各項目を定義するテンプレートを提供します。

デリゲートは、リピータ内のデリゲートのインデックスを示す読み取り専用のindex プロパティに公開されます。たとえば、次のText デリゲートは、繰り返される各項目のインデックスを表示します:

Column {
    Repeater {
        model: 10
        Text {
            required property int index
            text: "I'm item " + index
        }
    }
}

model文字列リストまたはオブジェクト・リストの場合、デリゲートは、文字列またはオブジェクト・データを保持する読み取り専用のmodelData プロパティにも公開されます。例えば

Column {
    Repeater {
        model: ["apples", "oranges", "pears"]
        Text {
            required property string modelData
            text: "Data: " + modelData
        }
    }
}

model がモデルオブジェクト(ListModel など)である場合、デリゲートは、ListView のようなビュークラスに対してデリゲートが行うのと同じように、すべてのモデルの役割を名前付きプロパティとしてアクセスすることができます。

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


model : var

リピーターにデータを提供するモデル。

このプロパティには、サポートされているデータモデルのいずれかを設定することができます:

  • リピーターが作成するデリゲートの数を示す数値。
  • モデル (ListModel アイテムやQAbstractItemModel サブクラスなど)
  • 文字列リスト
  • オブジェクト・リスト

モデルのタイプは、delegate に公開されるプロパティに影響します。

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


シグナル・ドキュメント

itemAdded(int index, Item item)

このシグナルは、アイテムがリピータに追加されたときに発行されます。index パラメータは、アイテムがリピータ内に挿入されたインデックスを保持し、item パラメータは、追加されたItem を保持します。

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


itemRemoved(int index, Item item)

このシグナルは、アイテムがリピータから削除されたときに発行されます。index パラメータは、アイテムがリピータから削除されたインデックスを保持し、item パラメータは、削除されたItem を保持します。

このリピータによって作成された場合は、item への参照を保持しないでください。このような場合、シグナルが処理された直後に削除されるからです。

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


メソッドのドキュメント

Item itemAt(index)

与えられたindex に作成されたItem を返します。index に項目が存在しない場合はnull を返します。


© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.