7

メモを保存および編集するアプリケーションがあります。メモのリストは、次のようにリストビューに表示されます。

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);
}

メモ項目は、QAbstractListModel をサブクラス化し、NoteListItems を含む NoteListModel です。私がやりたいことは、現在選択されている NoteListItem を保存して、ユーザーが変更したメモを保存したいときに内部の Note オブジェクトに簡単にアクセスできるようにすることです。ただし、qml デリゲートからバッキング NoteListItem にアクセスする方法がわかりません。modelData は別のもののようです。そうする方法はありますか?Note オブジェクトを QVariant でラップできれば、ロールを介して簡単にアクセスできますが、このように試してみると

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

というコンパイラエラーが発生しました

qmetatype.h:642: エラー: 不完全な型 'QStaticAssertFailure' への 'sizeof' の適用が無効です

または、バッキング コードから選択したリスト項目にアクセスしようとする必要がありますか? その方法はありますか?何かアイデアはありますか?

御時間ありがとうございます。よろしく、ピーター

4

1 に答える 1