我很难解释我的问题,所以我只是想让它变得简单并希望它能完成这项工作 . 我正在使用Qt5和QtQuick 2.0 .
我创建了一个继承自QAbstractListModel的MyListModel类,并保存MyListItem类型的项目 . 我在QML ListView中使用它作为 model: myListModel
,并且委托在可爱的TextInput框中显示来自MyListItem的 quantity
属性 . 一切正常 .
但是,当我从委托更改 quantity
值时,模型中的项目不会更新 . 我知道他们没有更新,因为我的 setQuantity(long desired_quantity)
函数,MyListItem的成员,没有运行 . 长话短说,我无法弄清楚如何从委托中实际调用setQuantity函数 . 我可以通过将 Q_PROPERTY(long quantity READ quantity WRITE setQuantity)
添加到MyListItem,然后使用 setContextProperty()
将 MyListItem myTemp
对象公开给QML,然后调用 myTemp.quantity = 10
来手动完成 . 但显然,如果代表可以不做这项工作 .
有人能指出我正确的方向吗?我觉得我已经尝试过Qt设计师可能期望的一切,但我什么都没得到 . 我找不到任何明确解决我的问题的文件 .
1 回答
TextInput框不会自动更新您的c模型,您必须自己执行此操作 . 您可以通过向模型添加插槽或Q_INVOKABLE方法来执行此操作:
您必须实现其中一种方法,以便更改模型中的相应数据行 . 不要忘记在更新后调用方法内的 dataChanged 方法 . 然后,在更新TextInput时,必须手动从QML委托调用这些方法:
这里 index 是在每个委托中定义的属性,text是TextInput中的文本 .