Как удалить элементы из указанного индекса, если тип списка не имеет метода pop(), метода удаления() или метода splice().
import QtQuick 2.15
import QtQuick.Window 2.15
Window {
width: 640
height: 480
visible: true
property list<QtObject> arr:[
QtObject{
property real a: 1.0
},
QtObject{
property real a: 1.0
},
QtObject{
},
QtObject{
}
]
Component.onCompleted: {
console.info(arr.length)
arr.remove(1)//error:TypeError: Property 'remove' of object [object Object] is not a function
console.info(arr.length)
}
}
Вы определяете JavaScript list
, поэтому сращивание должно работать:
arr.splice(1, 1)
Чтобы уточнить: splice()
работает правильно, но исключительно с list<var>
, а не с list<QtObject>
.
Использование list<var>
вместо list<QtObject>
позволяет использовать больше методов JavaScript, таких как splice
, pop
, push
и sort
, что повышает полезность.
ListView {
anchors.fill: parent
model: arr
property list<var> arr:[
{ a: 1.1 },
{ a: 2.2 }, // item to remove
{ a: 3.3 },
{ a: 4.4 }
]
delegate: ItemDelegate { text: modelData.a }
Component.onCompleted: {
arr.splice(1,1); // remove item at index 1
arr.pop(); // remove last item
arr.push( {a: 5.5 } ); // append to list
arr.sort((i,j) => -(i.a - j.a)); // sort descending
}
}
Вы можете Попробуйте решение list-var онлайн
Продолжение list<QtObject>
ограничит ваш доступ к методам JavaScript. Включены только базовые функции списка, и согласно документации (https://doc.qt.io/qt-6/qml-list.html), единственный метод усечения списка — уменьшение свойства length
. .
ListView {
anchors.fill: parent
model: arr
property list<QtObject> arr:[
QtObject { property real a: 1.1 },
QtObject { property real a: 2.2 }, // item to remove
QtObject { property real a: 3.3 },
QtObject { property real a: 4.4 }
]
delegate: ItemDelegate { text: modelData.a }
Component.onCompleted: {
// remove item at index 1
arr[1] = arr[2];
arr[2] = arr[3];
arr.length--;
}
}
Вы можете Попробуйте решение list-QtObject онлайн
Обратите внимание, что работает не только list<var>
, но и другие типы, встроенные в Javascript. Например, мы можем заставить это работать с помощью list<real>
:
ListView {
anchors.fill: parent
model: arr
property list<real> arr:[
1.1,
2.2, // item to remove
3.3,
4.4
]
delegate: ItemDelegate { text: modelData }
Component.onCompleted: {
arr.splice(1,1); // remove item at index 1
arr.pop(); // remove last item
arr.push( 5.5 ); // append to list
arr.sort((i,j) => -(i.a - j.a)); // sort descending
}
}
Вы можете Попробуйте онлайн-решение по списку
блин, это не массив javascript, это тип списка qml