Repeater QML Type

Instanziiert eine Anzahl von Item-basierten Komponenten unter Verwendung eines bereitgestellten Modells. Mehr...

Import Statement: import QtQuick
Inherits:

Item

Eigenschaften

Signale

Methoden

Detaillierte Beschreibung

Der Typ Repeater wird verwendet, um eine große Anzahl ähnlicher Elemente zu erstellen. Wie andere Ansichtstypen hat ein Repeater einen model und einen delegate: für jeden Eintrag im Modell wird der Delegat in einem mit Daten aus dem Modell gefüllten Kontext instanziiert. Ein Repeater-Element ist in der Regel von einem Positioner-Typ wie Row oder Column umschlossen, um die vom Repeater erstellten mehrfachen Delegaten-Elemente visuell zu positionieren.

Der folgende Repeater erstellt drei Instanzen eines Rectangle Elements innerhalb eines Row:

import QtQuick

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

Die model eines Repeaters kann jedes der unterstützten Datenmodelle sein. Zusätzlich kann ein Repeater Delegat, wie Delegierte für andere Ansichten, auf seinen Index innerhalb des Repeaters zugreifen, sowie auf die Modelldaten die für den Delegaten relevant sind. Siehe die Dokumentation der delegate Eigenschaft für Details.

Elemente, die vom Repeater instanziiert werden, werden in der Reihenfolge als Kinder des Repeater-Elternteils eingefügt. Das Einfügen beginnt unmittelbar nach der Position des Repeaters in seiner übergeordneten Stapelliste. Auf diese Weise kann ein Repeater auch innerhalb eines Layouts verwendet werden. Im folgenden Beispiel werden die Elemente des Wiederholungsreglers zwischen einem roten und einem blauen Rechteck gestapelt:

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

Hinweis: Ein Repeater-Element besitzt alle Elemente, die es instanziiert. Das Entfernen oder dynamische Zerstören eines von einem Repeater erstellten Objekts führt zu unvorhersehbarem Verhalten.

Überlegungen bei der Verwendung von Repeater

Der Repeater-Typ erstellt alle seine Delegatenelemente, wenn der Repeater zum ersten Mal erstellt wird. Dies kann ineffizient sein, wenn es eine große Anzahl von delegierten Elementen gibt und nicht alle Elemente gleichzeitig sichtbar sein müssen. In diesem Fall sollten Sie andere Ansichtstypen wie ListView verwenden (die delegierte Elemente nur erstellen, wenn sie in die Ansicht gescrollt werden) oder die Dynamic Object Creation Methoden verwenden, um Elemente nach Bedarf zu erstellen.

Beachten Sie auch, dass Repeater auf Item basiert und nur Item-abgeleitete Objekte wiederholen kann. Er kann zum Beispiel nicht verwendet werden, um QtObjects zu wiederholen:

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

Eigenschaft Dokumentation

count : int [read-only]

Diese Eigenschaft enthält die Anzahl der Elemente im Modell.

Hinweis: Die Anzahl der Elemente im Modell, wie von count gemeldet, kann sich von der Anzahl der erstellten Delegaten unterscheiden, wenn der Repeater gerade dabei ist, Delegaten zu instanziieren oder falsch eingerichtet ist.


delegate : Component [default]

Der Delegat bietet eine Vorlage, die jedes vom Repeater instanziierte Element definiert.

Delegaten wird eine schreibgeschützte index Eigenschaft zugewiesen, die den Index des Delegaten innerhalb des Repeaters angibt. Der folgende Text Delegat zeigt zum Beispiel den Index jedes wiederholten Elements an:

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

Handelt es sich bei model um eine Zeichenfolgen- oder Objektliste, ist der Delegat auch einer schreibgeschützten modelData Eigenschaft ausgesetzt, die die Zeichenfolgen- oder Objektdaten enthält. Zum Beispiel:

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

Wenn model ein Modellobjekt ist (z. B. ListModel), kann der Delegierte auf alle Modellrollen als benannte Eigenschaften zugreifen, so wie es Delegierte für Ansichtsklassen wie ListView tun.

Siehe auch QML-Datenmodelle.


model : var

Das Modell, das Daten für den Repeater bereitstellt.

Diese Eigenschaft kann auf jedes der unterstützten Datenmodelle gesetzt werden:

  • Eine Zahl, die die Anzahl der Delegaten angibt, die vom Repeater erstellt werden sollen
  • Ein Modell (z. B. ein Element ListModel oder eine Unterklasse QAbstractItemModel )
  • Eine String-Liste
  • Eine Objektliste

Die Art des Modells wirkt sich auf die Eigenschaften aus, die dem delegate zur Verfügung gestellt werden.

Siehe auch Datenmodelle.


Signal Dokumentation

itemAdded(int index, Item item)

Dieses Signal wird ausgegeben, wenn ein Element zum Repeater hinzugefügt wird. Der Parameter index enthält den Index, an dem das Element in den Repeater eingefügt wurde, und der Parameter item enthält das Item, das hinzugefügt wurde.

Hinweis: Der entsprechende Handler ist onItemAdded.


itemRemoved(int index, Item item)

Dieses Signal wird ausgegeben, wenn ein Element aus dem Repeater entfernt wird. Der Parameter index enthält den Index, bei dem das Element aus dem Repeater entfernt wurde, und der Parameter item enthält das Item, das entfernt wurde.

Behalten Sie keinen Verweis auf item, wenn er von diesem Repeater erstellt wurde, da er in diesen Fällen kurz nach der Bearbeitung des Signals gelöscht wird.

Hinweis: Der entsprechende Handler ist onItemRemoved.


Dokumentation der Methode

Item itemAt(index)

Gibt das Item zurück, das unter dem angegebenen index erstellt wurde, oder null, wenn unter index kein Element existiert.


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