如何从QML基本类型列表中动态删除元素?

时间:2019-01-11 15:20:01

标签: qt qml

我已经成功使用添加了元素

list.push(element)

但是如何删除它们?我已经尝试了以下方法,但是似乎都不起作用。

list.pop()
list.pop_front()
list.remove()
list.remove(int)
list.remove(element)

2 个答案:

答案 0 :(得分:3)

对于像我一样总是停留在此页面上的人:我发现了一种非常骇人听闻的解决方案,可以从list<QtObject>中删除元素。

myList = Array.from(myList).filter(r => r !== elementIWant2Remove)

这不是很优雅,但是如果您需要删除一个元素,它就可以解决问题。

答案 1 :(得分:2)

您无法删除单个项目。根据{{​​3}}:

  

请注意,对象一旦创建就无法单独添加到列表或从列表中删除;要修改列表的内容,必须将其重新分配给新列表。

这意味着pop方法很可能在基本列表类型中不存在。 (但是,有一种push方法是 。)

使用JavaScript数组会更好。

property var myArray: [1, 2, 3]

Component.onCompleted: {
    myArray.push(4);
    myArray.push(5);
    myArray.splice(1, 1)    // simulates a remove
    myArray.pop();          // pop last item

    console.debug(myArray)  // [1, 3, 4]
}

我在这里使用了int,但是您也可以存储QML对象和其他类型。使用JavaScript数组会将您的变量暴露给JavaScript的docs的大多数(如果不是全部)。