gpt4 book ai didi

qt - 如何从qml访问ListView的当前项目

转载 作者:行者123 更新时间:2023-12-02 01:52:32 29 4
gpt4 key购买 nike

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

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

注释项是一个 NoteListModel,它是 QAbstractListModel 的子类并包含 NoteListItems。我想要做的是存储当前选定的 NoteListItem,以便当用户想要保存修改后的注释时我可以轻松访问其中的 Note 对象。但是,我不知道如何从 qml 委托(delegate)访问支持 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:错误:“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),您可以按照与委托(delegate)中相同的方式访问该对象: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方法

关于qt - 如何从qml访问ListView的当前项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16389831/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com