Удаление отмеченных элементов из QML ListView - PullRequest
0 голосов
/ 27 апреля 2020

Я новичок в Qt и застрял в этом: у меня есть список элементов с флажками, поэтому, когда они отмечены, я хочу удалить их, я также могу добавить элементы в свой список, это кажется, работает ... но у меня проблемы с индексами, поэтому, когда я запускаю приложение, я могу удалить элемент, я могу добавить новый элемент, но затем я не могу удалить его, я получаю error- typeerror: не может прочитать свойство rowid из неопределенного.

Что я делаю не так и как мне обновить sh мой список после добавления / удаления элементов?

ListView {
    id: personCheckList
    clip: true
    width: 300
    height: 300
    Layout.topMargin: personTab.height + 120
    Layout.fillHeight: false
    Layout.alignment: Qt.AlignLeft | Qt.AlignTop
    Layout.rightMargin: 50
    Layout.leftMargin: 50

    model: ListModel {
        id: checkListPerson
        Component.onCompleted:

            JS.checkPerson();

    }
    delegate:
        CheckBox {
        property bool boxChecked : checkboxPerson.checked

        id: checkboxPerson
        text: person + " " + rowid
        checked: false
    }

// ...

Button {
    id: newPersonButton
    text: qsTr("ADD")
    Layout.alignment: Qt.AlignRight | Qt.AlignTop
    Layout.topMargin: 40
    Layout.leftMargin: 50
    Layout.rightMargin: 20
    Layout.bottomMargin: 40
    implicitWidth: 150
    onClicked: {
        var person = personTab.text;

        JS.insertPerson(person)


        popAdd.open()
        timer.start()
        personTab.text = ""

        checkListPerson.clear()
        JS.checkPerson()
    }
}


Button {
    id: delPersonButton
    text: qsTr("DELETE")
    Layout.alignment: Qt.AlignRight | Qt.AlignTop
    Layout.topMargin: 40
    Layout.rightMargin: 50
    Layout.bottomMargin: 40
    implicitWidth: 150
    onClicked: {

        for(var i in personCheckList.contentItem.children) {
            if(personCheckList.contentItem.children[i].boxChecked) {

                var id = (personCheckList.model.get(i).rowid)

                console.log(i, id)

                JS.deletePerson(id)
                //checkListPerson.remove(i)
                checkListPerson.clear()
                JS.checkPerson();
            }
        }

        popDel.open()
        timerDel.start()

    }
}

...

Я использую sqlite и мой строки автоматически генерируются

    /* insert person */

    function insertPerson(person)
    {
        var db = open()
        db.transaction(function (tx) {
            tx.executeSql('INSERT INTO persons VALUES (?)', [person]);
        })

    }


/* select person */

function checkPerson() {
    var db = open()
    db.transaction(function (tx) {
        var results = tx.executeSql(
                    'SELECT rowid, person FROM persons')
        for (var i = 0; i < results.rows.length; i++) {
            checkListPerson.append({
                                       person: results.rows.item(i).person,
                                       rowid: results.rows.item(i).rowid
                                   })
        }
    })
}

/* delete person */

function deletePerson(id)
{
    var db = open()
    db.transaction(function (tx) {
        tx.executeSql('DELETE FROM persons where rowid = ?', [id])
    })
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...