2012-08-02 64 views
0

我对QML比较陌生,需要一点帮助。我必须创建一个类似iPod的菜单,显示带有艺术家菜单,曲目菜单和专辑菜单的主菜单。我想过为每个模型使用相同的ListView,然后只是动态地交换模型,但QML不允​​许我这样做(看起来你必须自己添加和删除每个元素)。建立类似iPod的菜单

我想到的另一个解决方案是使用Loader加载不同的ListView与相应的模型,但我想重新使用相同的ListView,因为唯一正在改变的是内容。

此外,我必须在严格QML中做到这一点。它有一个C++部分;不过,这只是为了呈现QML,就是这样。有没有人有任何想法如何去做呢?

回答

2

可以更改ListView运行时的型号。

试试下面的代码:

Item { 
    width: 1000 
    height: 250 

    ListView { 
    id: view 
    anchors.fill: parent 

    model: model1 

    delegate: Component{ 
     Rectangle { 
     width: 50 
     height: 50 
     Text {text: value; anchors.centerIn: parent} 
     } 
    } 
    } 

    ListModel { 
    id: model1 
    ListElement {value: "A"} 
    ListElement {value: "B"} 
    ListElement {value: "C"} 
    } 

    ListModel { 
    id: model2 
    ListElement {value: "1"} 
    ListElement {value: "2"} 
    ListElement {value: "3"} 
    } 

    MouseArea { 
    anchors.fill: parent 
    onClicked: { 
     console.log("model2") 
     view.model = model2 
    } 
    } 
}