如何从 qml 访问列表视图的当前项



我有一个存储和编辑笔记的应用程序。注释列表显示在列表视图中,如下所示:

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

notes项是一个NoteListModel,它是QAbstractListModel的子类,并且包含NoteListItems。我想做的是存储当前选择的NoteListItem,这样当用户希望保存修改后的笔记时,我就可以轻松地访问其中的Note对象。但是,我不知道如何从qml委托访问后台NoteListItem。modelData似乎是另一回事。有什么办法吗?如果我可以在QVariant中包装Note对象,我可以通过角色轻松访问它,但是当我这样尝试时

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

导致编译器错误说

qmettype .h:642:错误:无效的sizeof应用于不完整的QStaticAssertFailure类型

或者我应该尝试从后台代码访问选定的列表项?有什么办法吗?你有什么主意吗?

谢谢你的时间。问候,彼得。

这花了我很长时间才找到,因为在Stackoverflow上有许多不正确的解决方案。

纯QML方式是使用DelegateModel并从QML访问它,如下所示:

import QtQuick 2.4
import QtQml.Models 2.1
ListView {
    property var currentSelectedItem
    onCurrentItemChanged{
            // Update the currently-selected item
            currentSelectedItem = myDelegateModel.items.get(currentIndex).model;
            // Log the Display Role
            console.log(currentSelectedItem.display);
    }
    model: DelegateModel {
        id: myDelegateModel
        model: myAbstractItemModel
        delegate: {
            // Define delegates here
        }
    }
}

这一行返回一个对象(var),你可以像在委托中一样访问它:myDelegateModel.items.get(currentIndex).model

这个例子假设你只使用默认的DelegateModelGroup。

见http://doc.qt.io/qt-5/qml-qtqml-models-delegatemodel.htmlhttp://doc.qt.io/qt-5/qml-qtqml-models-delegatemodelgroup.html#get-method方法

相关内容

  • 没有找到相关文章

最新更新