Как удалить из UbuntuListView?

Я пытаюсь изучить, как использовать 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()
                    }
                ]
            }
        }
    }
}

enter image description here

Я перетаскиваю второй элемент списка и двигаю его направо. Удалить опция появляется, но когда я нажимаю ее, я получаю следующую ошибку:

Main.qml:29: Error: Invalid attempt to destroy() an indestructible object

Я последовал примерам из документов API.

Что я делаю неправильно?

Между прочим, я также должен удалить соответствующий образцовый объект, но как я делаю это?

0
задан 1 August 2015 в 10:52

1 ответ

Между прочим, я также должен удалить соответствующий образцовый объект, но как я делаю это?

, По-видимому, это было решением: Я просто удалил из модели, и представление обновило себя.

  • я добавил идентификатор к 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);
}

, Таким образом, я предполагаю, объект был неразрушим, потому что он все еще имел соответствующий объект в модели - который имеет смысл. Но в этом случае..., возможно, документация является немного вводящей в заблуждение.

1
ответ дан 29 July 2019 в 21:40

Другие вопросы по тегам:

Похожие вопросы: