Auf dieser Seite

Repeater QML Type

Erzeugt anhand eines bereitgestellten Modells eine Reihe von Item-basierten Komponenten. Mehr...

Import Statement: import QtQuick
Inherits:

Item

Eigenschaften

Signale

Methoden

Ausführliche Beschreibung

Der Typ „Repeater“ wird verwendet, um eine große Anzahl ähnlicher Elemente zu erstellen. Wie andere Ansichtstypen verfügt auch ein Repeater über einen „ model “ und einen „ delegate “: Für jeden Eintrag im Modell wird der Delegat in einem Kontext instanziiert, der mit Daten aus dem Modell vorbelegt ist. Ein Repeater-Element wird in der Regel in einen Positioner-Typ wie „ Row “ oder „ Column “ eingebettet, um die vom Repeater erstellten zahlreichen Delegate-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"
        }
    }
}

Drei gelbe Rechtecke in einer Reihe, erstellt mit „Repeater“

Das „ model “ eines Repeaters kann jedes der unterstützten Datenmodelle sein. Darüber hinaus kann ein Repeater-Delegat – wie Delegate für andere Ansichten auch – auf seinen Index innerhalb des Repeaters sowie auf die für das Delegat relevanten Modelldaten zugreifen. Weitere Informationen finden Sie in der Dokumentation zur Eigenschaft „ delegate “.

Die vom Repeater instanziierten Elemente werden der Reihe nach als untergeordnete Elemente des übergeordneten Elements des Repeaters eingefügt. Das Einfügen beginnt unmittelbar nach der Position des Repeaters in der Stapelliste seines übergeordneten Elements. Dadurch kann ein Repeater innerhalb eines Layouts verwendet werden. Beispielsweise werden die Elemente des folgenden Repeaters 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" }
}

Zeile mit rotem Rechteck, zehn grünen Kreisen aus dem Repeater und einem blauen Rechteck

Hinweis: Ein Repeater-Element ist Eigentümer aller Elemente, die es instanziiert. Das Entfernen oder dynamische Löschen eines von einem Repeater erstellten Elements führt zu unvorhersehbarem Verhalten.

Überlegungen zur Verwendung des „Repeater“

Der Typ „Repeater“ erstellt alle seine Delegate-Elemente, wenn der Repeater zum ersten Mal erstellt wird. Dies kann ineffizient sein, wenn eine große Anzahl von Delegate-Elementen vorhanden ist und nicht alle Elemente gleichzeitig sichtbar sein müssen. In diesem Fall sollten Sie die Verwendung anderer Ansichtstypen wie „ ListView “ in Betracht ziehen (der Delegat-Elemente erst dann erstellt, wenn sie durch Scrollen in den sichtbaren Bereich gelangen) oder die Methoden „ Dynamic Object Creation “ nutzen, um Elemente bei Bedarf zu erstellen.

Beachten Sie außerdem, dass „Repeater“ auf „ Item “ basiert und nur von „ Item “ abgeleitete Objekte wiederholen kann. So kann er beispielsweise nicht zur Wiederholung von QtObjects verwendet werden:

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

Dokumentation zu den Eigenschaften

count : int [read-only]

Diese Eigenschaft enthält die Anzahl der Elemente in der ` model`.

Der Wert von „ count “ stimmt nicht immer mit der Anzahl der instanziierten „ delegates “ überein; verwenden Sie „ itemAt()“, um zu prüfen, ob ein Delegat an einem bestimmten Index vorhanden ist. Die Methode gibt „ null “ zurück, wenn der Delegat nicht instanziiert ist.

  • Während der Repeater Delegates instanziiert (beim Start oder aufgrund von Änderungen an ` model `), wird für jeden erstellten Delegate das Signal ` itemAdded ` ausgesendet, und die Eigenschaft ` count ` ändert sich anschließend.
  • Ist der Repeater nicht Teil einer vollständigen visuellen Hierarchie, spiegelt ` count ` die Modellgröße wider, es werden jedoch keine Delegaten erstellt.
  • Wenn der Repeater Delegaten aufgrund von Änderungen an „ model “ zerstört, wird für jeden das Signal „ itemRemoved()“ ausgelöst, und die Eigenschaft „ count “ ändert sich anschließend.
  • Wird der Repeater aus der visuellen Hierarchie entfernt (beispielsweise durch Setzen von ` parent = null`), werden Delegaten zerstört, für jeden wird das Signal ` itemRemoved()` ausgelöst, aber ` count ` ändert sich nicht.

Siehe auch „ itemAt()“, „ itemAdded()“ und „ itemRemoved()“.

delegate : Component [default]

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

Delegaten steht eine schreibgeschützte Eigenschaft „ index “ zur Verfügung, die den Index des Delegaten innerhalb des Repeaters angibt. Der folgende Delegat „ Text “ zeigt beispielsweise den Index jedes wiederholten Elements an:

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

Textelemente mit den Bezeichnungen „Ich bin Element 0“ bis „Ich bin Element 9“

Ist „ model “ eine Zeichenfolgen- oder Objektliste, verfügt der Delegat zudem über eine schreibgeschützte Eigenschaft „ modelData “, die die Zeichenfolgen- oder Objektdaten enthält. Beispiel:

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

Textelemente mit den Angaben „Daten: Äpfel“, „Daten: Orangen“, „Daten: Birnen“

Ist die „ model “ ein Modellobjekt (wie beispielsweise ein „ ListModel “), kann der Delegat auf alle Modellrollen als benannte Eigenschaften zugreifen, genau wie dies bei Delegaten für Ansichtsklassen wie „ ListView “ der Fall ist.

Siehe auch QML-Datenmodelle.

delegateModelAccess : enumeration [since 6.10]

Diese Eigenschaft legt fest, wie Delegaten auf das Modell zugreifen können.

KonstanteBeschreibung
DelegateModel.ReadOnlyVerhindert, dass Delegaten das Modell über Kontexteigenschaften, das Objekt „ model “ oder erforderliche Eigenschaften schreiben können.
DelegateModel.ReadWriteErlaubt Delegaten, das Modell über Kontexteigenschaften, das „ model “-Objekt oder erforderliche Eigenschaften zu schreiben.
DelegateModel.Qt5ReadWriteErlaubt Delegaten, das Modell über das „ model “-Objekt und Kontexteigenschaften zu schreiben, jedoch nicht über erforderliche Eigenschaften.

Die Standardeinstellung ist „ DelegateModel.Qt5ReadWrite “.

Diese Eigenschaft wurde in Qt 6.10 eingeführt.

Siehe auch „Modelle und Ansichten“ unter Qt Quick#Ändern von Modelldaten.

model : var

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

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

  • Eine Zahl, die die Anzahl der vom Repeater zu erstellenden Delegaten angibt
  • Ein Modell (z. B. ein „ ListModel “-Element oder eine Unterklasse von „ QAbstractItemModel “)
  • Eine Zeichenfolgenliste
  • Eine Objektliste

Der Modelltyp beeinflusst die Eigenschaften, die dem „ delegate “ zur Verfügung gestellt werden.

Siehe auch „Datenmodelle“.

Signal-Dokumentation

itemAdded(int index, Item item)

Dieses Signal wird ausgelöst, 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 hinzugefügte „ Item “.

Hinweis: Der entsprechende Handler lautet „ onItemAdded “.

itemRemoved(int index, Item item)

Dieses Signal wird ausgelöst, wenn ein Element aus dem Repeater entfernt wird. Der Parameter „ index “ enthält den Index, an dem das Element aus dem Repeater entfernt wurde, und der Parameter „ item “ enthält das entfernte „ Item “.

Behalten Sie keine Referenz auf ` item ` bei, wenn es von diesem Repeater erstellt wurde, da es in diesen Fällen kurz nach der Verarbeitung des Signals gelöscht wird.

Hinweis: Der entsprechende Handler ist „ onItemRemoved “.

Methodendokumentation

Item itemAt(index)

Gibt den unter der angegebenen Adresse index erstellten „ Item “ zurück oder null, falls unter index kein Eintrag vorhanden ist.

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