Jak uzyskać dostęp do bieżącego elementu ListView z qml
Mam aplikację, która przechowuje i edytuje notatki. Lista notatek jest wyświetlana w widoku listy takim jak ten:
Page {
id: noteList
title: i18n.tr("QNote")
visible: false
Column {
anchors.fill: parent
ListView {
anchors.fill: parent
model: notes
delegate: ListItem.Standard {
text: Title
onClicked: editNote(NoteText, Title, modelData);
progression: true
}
}
}
}
function editNote(text, title, item) {
pageStack.push(noteEdit, {title: title, text: text});
handler.setActiveItem(item);
}
Przedmiotem notatek jest NoteListModel, który podklasuje QAbstractListModel i zawiera NoteListItems. Chciałbym zapisać aktualnie wybrany obiekt NoteListItem, aby móc łatwo uzyskać dostęp do obiektu Note wewnątrz, gdy użytkownik chce zapisać zmodyfikowaną notatkę. Jednak nie wiem, jak uzyskać dostęp do NoteListItem kopii zapasowej z delegata qml. modelData wydaje się być czymś innym. Czy jest jakiś sposób, aby to zrobić? Gdybym mógł zawinąć obiekt Note w wariancie QVariant, mógłbym uzyskać do niego łatwy dostęp poprzez role, ale gdy spróbowałem w ten sposób
QVariant NoteListItem::data(int role) {
switch (role) {
case Title:
return note.getTitle();
case NoteText:
return note.getText();
case NoteObject:
return QVariant::fromValue(note);
default:
return QVariant();
}
}
spowodowało to błąd kompilatora
qmetatype.h: 642: error: nieprawidłowa aplikacja „sizeof” na niekompletny typ „QStaticAssertFailure”
Czy powinienem spróbować uzyskać dostęp do wybranego elementu listy z kodu kopii zapasowej? Czy jest na to jakiś sposób? Czy masz jakieś pomysły?
Dziękuję za Twój czas. Pozdrawiam, Peter