Я пытаюсь изучить, как использовать UbuntuListView
. Объекты будут добавлены во времени выполнения, но для демонстрации I просто hardcoded их.
То, в чем я нуждаюсь, является способом удалить существующие элементы списка. Вот мой код и снимок экрана.
import QtQuick 2.4
import Ubuntu.Components 1.2
MainView {
width: units.gu(40)
height: units.gu(30)
ListModel {
id: listModel
ListElement {itemName: "one"}
ListElement {itemName: "two"}
ListElement {itemName: "three"}
}
UbuntuListView {
anchors.fill: parent
model: listModel
delegate: ListItem {
id: listItem
Label {
text: itemName
}
leadingActions: ListItemActions {
actions: [
Action {
iconName: "delete"
onTriggered: listItem.destroy()
}
]
}
}
}
}
Я перетаскиваю второй элемент списка и двигаю его направо. Удалить опция появляется, но когда я нажимаю ее, я получаю следующую ошибку:
Main.qml:29: Error: Invalid attempt to destroy() an indestructible object
Я последовал примерам из документов API.
Что я делаю неправильно?
Между прочим, я также должен удалить соответствующий образцовый объект, но как я делаю это?
Между прочим, я также должен удалить соответствующий образцовый объект, но как я делаю это?
, По-видимому, это было решением: Я просто удалил из модели, и представление обновило себя.
я добавил идентификатор к listElements:
ListElement {itemId: 1; itemName: "one"}
В действии onTriggered
, я искал объект и удалил его из модели:
onTriggered: {
for(var i = 0; i < listModel.count; i++) {
if(listModel.get(i).itemId === itemId) {
listModel.remove(i);
break;
}
}
}
На самом деле, поиск даже не необходим. Согласно документам API для QtQuick.ListView
:
индекс выставляется как доступное
index
свойство.
, Таким образом, возможно записать просто:
onTriggered: {
listModel.remove(index);
}
, Таким образом, я предполагаю, объект был неразрушим, потому что он все еще имел соответствующий объект в модели - который имеет смысл. Но в этом случае..., возможно, документация является немного вводящей в заблуждение.