2011-10-04 74 views
1

我得到了這樣的定義的fonctionnal的ListModel:在其他qml文件中定義的ListElements(ListModel)?

ListModel { 
    id: leftGrid 
    ListElement { icon: "Images/1.png" } 
    ListElement { icon: "Images/2.png" } 
} 

的事情是,我想在不同的QML文件中定義ListElement,但我真的不知道該怎麼做...

我寫了這樣的QML:

//myWidget.qml 
import QtQuick 1.0 

ListElement { 
    icon: "Images/X.png" 
} 

但我不知道如何在我的主文件「調用」或「實例化」這......

我想:

ListModel { 
    id: leftGrid 
    ListElement { icon: "Images/1.png" } 
    myWidget //qml file 
} 

和:

ListModel { 
    id: leftGrid 
    ListElement { icon: "Images/1.png" } 
    ListElement { myWidget } 
} 

兩個不工作...

任何幫助的歡迎,在此先感謝。

回答

2

我不認爲有可能將ListElements作爲單獨的文件。這是因爲當你這樣做的時候,你隱式地創建了一個Component,其中包含你的內容(在這裏是ListElement)。然而,ListModel只能接受ListElements作爲它的子元素,而不能包含嵌套ListElements的元素。

但是你可以做些什麼來動態地定義你的模型項目是申報的ListModel,然後通過一段JavaScript代碼添加您的數據,例如在你的Component.onCompleted處理程序。

如果你看一下在的ListModel API,你會看到它有一個append()方法,等等。 你可以通過一個JS字典這種方法,它會添加一個新的ListElement到列表中,根據字典填充其屬性。

例子:

import QtQuick 1.0 

Rectangle { 
    width: 360 
    height: 360 

    ListView { 
     id:list 
     anchors.fill: parent 
     model: ListModel { 
      ListElement { foo: "hello" } 
     } 
     delegate: Text { 
      text: foo 
      width: ListView.view.width 
     } 

     Component.onCompleted: { 
      list.model.append({ "foo": "world" }) 
     } 
    } 
} 

你的列表會出現在這兩個項目: 「你好」 和 「世界」