У меня есть простая программа 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
, но делегат этого не знает, есть ли способ привести модель к известному типу затем вызвать его метод?