Я новичок в 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])
})
}