【发布时间】:2020-10-29 19:38:44
【问题描述】:
我有一个简单的 QML 程序,它有一个 ListView。 ListView 的模型和委托在单独的 QML 文件中定义。
//Main.qml
import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.12
//import TheModel.qml
//import TheDelegate.qml
Window {
id: window
visible: true
width: 640
height: 480
title: qsTr("Hello World")
ListView {
anchors.fill: parent
model: theModel
delegate: theDelegate
focus: true
}
Button{
x: 394
y: 257
text: "press me"
onPressed: theModel.append({"color":"black", "cost": 5.95, "name":"Pizza"})
}
TheDelegate{
id: theDelegate
}
TheModel{
id:theModel
}
}
然后是模型文件
//TheModel.qml
import QtQuick 2.0
ListModel{
ListElement {
color:"red";
name: "Bill Smith"
number: "555 3264"
}
ListElement {
color:"blue";
name: "John Brown"
number: "555 8426"
}
ListElement {
color:"green";
name: "Sam Wise"
number: "555 0473"
}
}
最后是委托
//TheDelegate.qml
import QtQuick 2.0
Component {
Rectangle{
color: model.color
width: 100
height: 100
MouseArea{
anchors.fill: parent
onPressed: model.append({"color":"black", "cost": 5.95, "name":"Pizza"})
}
}
}
如果我单击委托的MouseArea onPressed 方法将需要创建一个ListItem,但问题是我无法从委托访问模型的功能。令人困惑的是,这些属性是通过model 在委托中访问的。
任何人都可以指出这样做的正确方法,说如果我知道模型是ListModel 并且它有append 方法,但委托不知道,有没有办法将模型转换为已知类型那么调用一个方法呢?
【问题讨论】: