2016-08-08 67 views
2

Ich versuche, eine Matrix der gleichen Art von Elementen in meiner QML-Anwendung dynamisch zu erstellen und dynamisch zu halten, so dass Sie jederzeit die Anzahl der Zeilen und Spalten in einer C++ - Datei ändern können. Das hat gut funktioniert, aber jetzt, um sie einzeln aufzurufen, möchte ich ihnen dynamische Namen geben. Deshalb verschachtelt ich zwei Repeater und versuchte, die ObjektName wie im Folgenden zu setzen:Gibt es irgendeine Möglichkeit, den Index eines äußeren QML Repeaters von dem inneren zu erreichen (sie sind verschachtelt)?

Repeater{ 
     id: rows 
     model: Matrix1.row //number of rows in Matrix1-Object 

     Repeater{ 
      id: columns 
      model: Matrix1.column //number of columns in Matrix1-Object 

      RepeatedItem{ 
       objectName: (index) +"."+ (rows.index) //matrix elements are 
       supposed to be numbered x.y because of the nested repeaters, e.g. 
       0.0 for the first element 
      } 
     } 
    } 

Leider scheine ich keinen Zugriff auf den äußeren Index zu haben. Der erste Wert wird angezeigt, der zweite Wert wird durch den String undefined in der TextArea meiner GUI dargestellt. Wenn ich dem äußeren Repeater eine neue Eigenschaft hinzufüge und denselben Wert wie index anlege, wird dieser einmal gesetzt und der erste Wert (0) für jede wiederholte Zeile beibehalten.

Ist es irgendwie unmöglich, diesen äußeren Indexwert dynamisch zu erreichen? Oder kennt jemand eine bessere Möglichkeit, zweidimensionale Arrays von Elementen in QML dynamisch zu erstellen, auf die einzeln zugegriffen werden kann?

Antwort

4

Die index-Eigenschaft ist eine Kontexteigenschaft. Sie können es zu einer gewöhnlichen Eigenschaft speichern, so dass Sie es von einem anderen Kontext zugreifen:

Repeater { 
    id: rows 
    // ... 
    Repeater { 
     id: columns 
     property int outerIndex: index 
     // ... 
     Text { 
      text: index + "." + columns.outerIndex 
     } 
    } 
} 
0

Persönlich habe ich es gelöst mit nur einem Repeater mit der folgende Modell Eigenschaft: Matrix1.column * Matrix1.row. Außerdem habe ich festgestellt, dass es für meinen Zweck gut ist, nur Zeilen und Spalten des angeklickten Elements mit% - und/- Operatoren, Zeilennummer, Spaltennummer und dem zuletzt aufgerufenen Index zu berechnen.