Como excluir de um UbuntuListView?

0

Estou tentando aprender como usar um UbuntuListView . Itens serão adicionados em tempo de execução, mas para demonstração, eu os codifiquei.

O que eu preciso é uma maneira de remover itens de lista existentes. Aqui está o meu código e uma captura de tela.

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()
                    }
                ]
            }
        }
    }
}

Arrastoosegundoitemdalistaedeslize-oparaadireita.Aopçãodeexclusãoaparece,masquandoclico,recebooseguinteerro:

Main.qml:29:Error:Invalidattempttodestroy()anindestructibleobject

Euseguiosexemplosdos documentos da API .

O que estou fazendo de errado?

A propósito, eu também preciso remover o item de modelo correspondente, mas como faço isso?

    
por Cos64 01.08.2015 / 09:52

1 resposta

1

% bl0ck_qu0te%

Aparentemente, essa foi a solução: acabei de excluir o modelo e a visualização se atualizou.

  • Eu adicionei um ID ao listElements:

    ListElement {itemId: 1; itemName: "one"}
    
  • Na ação onTriggered , procurei o item e o removi do modelo:

    onTriggered: {
        for(var i = 0; i < listModel.count; i++) {
            if(listModel.get(i).itemId === itemId) {
                listModel.remove(i);
                break;
            }
        }
    }
    

Na verdade, a pesquisa nem é necessária. De acordo com os documentos da API para QtQuick.ListView :

% bl0ck_qu0te%

Portanto, é possível escrever apenas:

onTriggered: {
    listModel.remove(index);
}

Então eu suponho que o objeto era indestrutível porque ainda tinha um item correspondente no modelo - o que faz todo o sentido. Mas neste caso ... talvez a documentação seja um pouco enganadora.

    
por Cos64 01.08.2015 / 10:34