如何在QML中动态地向VisualItemModel添加项目?

时间:2015-03-14 14:08:27

标签: javascript qt listview qml

我有一个基于文本框的自定义qml元素。我希望每当用户按下VisualItemModel中的最后一个文本框时,会自动添加一个新的文本框。有一种方法可以使用ListModel(使用append()),但没有使用VisualItemModel。

怎么做?即使是Javascript也会有所帮助。

1 个答案:

答案 0 :(得分:3)

似乎VisualItemModel并非真正用于动态管理 - 它是一个纯粹的静态构造。

VisualItemModel是一个懒惰而笨拙的解决方案,用于获取列表视图以显示不同的元素,将数据和UI塞入在一起。如果这是重点,您可以使用标准ListModelListView轻松实现此目的:

ListView {
    anchors.fill: parent
    model: mod
    delegate: Loader {
        source: name + ".qml"
    }
}

然后你可以像这样追加模型:

mod.append({"name" : "ItemName"})

然后在列表视图中,委托将为每个列表条目创建适当的元素。

如果您不想为这些项目设置单独的来源,则可以在ComponentLoader而不是source设置{{sourceComponent: name中包含不同的项目1}}:

Component {
    id: c2
    Rectangle {
        width: 200
        height: 100
        color: "blue"
    }
}

....
mod.append({"name" : c2})

但是在你的情况下,你似乎不需要不同的元素来拥有不同的UI,因此你也不需要VisualItemModel。只需让视图委托一个文本框并附加到标准ListModel,您就会得到另一个文本框。