このページでは

Repeater QML Type

指定されたモデルを使用して、Item ベースのコンポーネントを複数インスタンス化します。詳細...

Import Statement: import QtQuick
Inherits:

Item

プロパティ

信号

方法

詳細説明

Repeater タイプは、類似したアイテムを多数作成するために使用されます。他のビュータイプと同様に、Repeater にはmodel とdelegate があります。モデル内の各エントリについて、モデルからのデータが初期設定されたコンテキスト内でデリゲートがインスタンス化されます。 通常、リピーター項目は、Row やColumn などのポジショナー型で囲まれ、リピーターによって作成された複数のデリゲート項目を視覚的に配置します。

次の Repeater は、Row 内でRectangle 項目のインスタンスを 3 つ作成します。

import QtQuick

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

リピーターによって作成された、3つの黄色い長方形が並んだもの

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

Repeater によってインスタンス化された項目は、順序通りに Repeater の親要素の子要素として挿入されます。 挿入は、親のスタッキングリストにおけるリピーターの位置の直後から開始されます。これにより、レイアウト内でリピーターを使用することが可能になります。たとえば、次のリピーターのアイテムは、赤い矩形と青い矩形の間に配置されています:

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" }
}

赤い長方形、リピーターから生成された10個の緑色の円、および青い長方形が並んでいる

注: Repeaterアイテムは 、自身がインスタンス化したすべてのアイテムを所有します。Repeater によって作成されたアイテムを削除したり、動的に破棄したりすると、予期しない動作を引き起こす可能性があります。

Repeater を使用する際の考慮事項

Repeater タイプは、Repeater が最初に作成された際に、すべてのデリゲート項目を生成します。デリゲート項目が多数あり、かつすべての項目を同時に表示する必要がない場合、これは非効率的になる可能性があります。 このような場合は、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]

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

count の値は、インスタンス化されたdelegates の数と必ずしも一致するとは限りません。指定されたインデックスにデリゲートが存在するかどうかを確認するには、itemAt()を使用してください。デリゲートがインスタンス化されていない場合、null が返されます。

  • Repeater がデリゲートのインスタンス化を行っている間(起動時、またはmodel の変更による場合)、作成された各デリゲートに対してitemAdded シグナルが発行され、その後count プロパティが変更されます。
  • Repeater が完成したビジュアル階層の一部でない場合、count はモデルのサイズを反映しますが、デリゲートは作成されません。
  • model の変更により Repeater がデリゲートを破棄する場合、それぞれについてitemRemoved() 信号が発信され、その後、count プロパティが変更されます。
  • Repeater が視覚階層から取り除かれた場合(たとえば、parent = null を設定した場合など)、デリゲートは破棄され、それぞれについてitemRemoved() シグナルが発信されますが、count は変化しません。

itemAt()、itemAdded()、およびitemRemoved()も参照してください 。

delegate : Component [default]

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

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

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

「私はアイテム0です」から「私はアイテム9です」までを表示するテキスト項目

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

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

「Data: apples」、「Data: oranges」、「Data: pears」と表示されるテキスト項目

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

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

delegateModelAccess : enumeration [since 6.10]

このプロパティは、デリゲートがモデルにアクセスする方法を決定します。

定数説明
DelegateModel.ReadOnlyデリゲートが、コンテキストプロパティ、model オブジェクト、または必須プロパティのいずれかを介してモデルに書き込みを行うことを禁止します。
DelegateModel.ReadWriteデリゲートが、コンテキストプロパティ、model オブジェクト、または必須プロパティのいずれかを介してモデルに書き込みを行うことを許可します。
DelegateModel.Qt5ReadWriteデリゲートが、model オブジェクトおよびコンテキストプロパティを介してモデルへの書き込みを行えるようにしますが、必須プロパティを介した書き込みは許可しません。

デフォルトは `DelegateModel.Qt5ReadWrite` です。

このプロパティは Qt 6.10 で導入されました。

「 Qt Quick におけるモデルとビュー」の「モデルデータの変更」も参照してください 。

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 ` を返します。

© 2026 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.