我有一个在QML中使用的JS数组。在此数组中,我存储了许多动态对象(组件),这些对象是我创建并显示在应用程序窗口中的。我还有一个清除所有按钮,该按钮应该通过遍历该数组来删除所有项目。我先使用delete然后再使用shift()
来删除项目,但是由于某种原因,并不是每个对象都被删除或删除。这是为什么?
这是无效的代码:
Button
{
id: clearallButton
width: 60
height: 25
text: qsTr("Clear all")
onClicked:
{
for (var y = 0; y < canvas.componentvect.length; ++y)
{
canvas.componentvect[y].destroy();
canvas.componentvect.shift();
}
}
}
这是一直为我工作的代码:
Button
{
id: clearallButton
width: 60
height: 25
text: qsTr("Clear all")
onClicked:
{
for (var y = 0; y < canvas.componentvect.length; ++y)
{
canvas.componentvect[y].destroy();
}
var emptyvect=[];
canvas.componentvect=emptyvect;
}
}
当我尝试变体1时,它仅删除了一些对象,而有些仍然保留?这是为什么?我对每个对象调用delete,并shift()
将其从数组中删除。难道不应该像示例2那样删除每个对象吗?
答案 0 :(得分:1)
好吧,我现在感到非常愚蠢。通过在循环内使用shift(),迭代将无法正常进行,因为如果迭代变量破坏了位置0上的对象,然后我使用shift(),原本应该位于位置1上的对象将移至位置0。误会我的坏话。
这是更新的代码,它可以正常工作:
onClicked:
{
while(canvas.componentvect.length !=0)
{
canvas.componentvect[0].destroy();
canvas.componentvect.shift();
}
}