2015-01-12 9 views
6

Próbuję więc dynamicznie tworzyć listę reguł w wersji ListModel. Działa to dobrze, dopóki nie spróbuję napisać niektórych treści w ListElements do dynamicznego ładowania.Dynamicznie twórz QML ListElement i zawartość

Próbowałem utworzyć własny plik z ListElement wewnątrz i godzinę jako właściwość, ale model następnie dostałem błąd, mówiąc, że ListElement nie może być zagnieżdżony.

Błąd na prowadzenie poniższy kod to:

nie można przypisać do nieistniejącej właściwości „godzinę”

Jak mogę rozwiązać ten problem?

Kod:

import QtQuick 2.0 

ListModel 
{ 
    id: listModel 

    Component.onCompleted: 
    { 
     for (var i = 0; i < 24; i++) 
     { 
      var object = createListElement(listModel) 
     } 
    } 

    function createListElement(parent) 
    { 
     var object = Qt.createQmlObject('import QtQuick 2.0; ListElement { hour: "01" }', parent); 

     return object; 
    } 
} 

EDIT: zmienić linię kodu w funkcji do:

var object = Qt.createQmlObject('import QtQuick 2.0; ListElement { property string hour: "23" }', parent); 

Teraz otrzymuję żadnych błędów, ale elementy są nadal nie pokazując w Lista.

ROZWIĄZANIE:

import QtQuick 2.0 

ListModel 
{ 
    id: listModel 

    Component.onCompleted: 
    { 
     for (var i = 0; i < 24; i++) 
     { 
      append({ hour: i.toString() }) 
     } 
    } 
} 

Odpowiedz

7

Nie jestem pewien, dlaczego to nie działa, ale przy użyciu zwykłego starych obiektów JavaScript spełnia swoje zadanie:

import QtQuick 2.4 
import QtQuick.Window 2.0 

Window { 
    width: 400 
    height: 400 

    ListView { 
     id: listView 
     anchors.fill: parent 
     model: listModel 
     delegate: Rectangle { 
      width: listView.width 
      height: listView.height/4 

      Text { 
       text: hour 
       anchors.centerIn: parent 
      } 
     } 
    } 

    ListModel { 
     id: listModel 

     Component.onCompleted: { 
      for (var i = 0; i < 24; i++) { 
       append(createListElement()); 
      } 
     } 

     function createListElement() { 
      return { 
       hour: "01" 
      }; 
     } 
    } 
} 
+0

co zrobiłeś prace tutaj też. Dzięki. – Phat

Powiązane problemy