【问题标题】:ListElements (ListModel) defined in other qml files?在其他 qml 文件中定义的 ListElements (ListModel)?
【发布时间】:2011-10-09 01:18:50
【问题描述】:

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

两者都不起作用...

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

【问题讨论】:

    标签: qt qml qt-quick


    【解决方案1】:

    我认为不可能将 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”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多