我有一个基于文本框的自定义qml元素。我希望每当用户在VisualItemModel中按下最后一个文本框时,就会自动添加一个新的文本框。有一种方法可以使用ListModel进行此操作(使用append()),而对于VisualItemModel则没有任何方法。这该怎么做?甚至Javascript也会有所帮助。

最佳答案

好像VisualItemModel并不是真正用于动态管理的-它是纯静态的构造。
VisualItemModel是一种懒惰且笨拙的解决方案,它可以获取列表 View 以显示不同的元素,从而将数据和UI挤在一起。如果可以的话,您可以使用标准的ListModelListView轻松实现:

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

然后,您可以像这样追加到模型:
mod.append({"name" : "ItemName"})

然后,在列表 View 中,委托(delegate)将为每个列表条目创建适当的元素。

如果您不想为这些商品提供单独的来源,则可以将不同的商品包装在ComponentLoader中,而不是在source中设置sourceComponent: name:
Component {
    id: c2
    Rectangle {
        width: 200
        height: 100
        color: "blue"
    }
}

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

但是在您的情况下,您似乎不需要不同的元素来具有不同的UI,因此您实际上也不需要VisualItemModel。只需使 View 委托(delegate)一个文本框并附加到标准ListModel,您将获得另一个文本框。

10-07 23:22