1

我有一个这样定义的功能 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 }
}

两个都不行...

欢迎任何帮助,在此先感谢。

4

1 回答 1

2

我认为不可能将 ListElements 作为单独的文件。这是因为当您这样做时,您正在隐式创建一个组件,其中包含您的内容(在本例中为 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" })
        }
    }
}

您的列表中将出现两个项目:“hello”和“world”

于 2011-10-08T17:18:50.520 回答