#情况是想实现一个包含多个相同的复杂子项的界面,在外部需要调用子项的一些函数。原本用Column是可以直接用children访问到代理内部的函数,但Column不支持中见插入和删除,所以改用ListView进行替换,但是却发现ListModel无法访问代理的内部函数,想过通过调用C++发送信号到内部子项,但是却发现内部子项接收不到C++的信号;又尝试通过ListView访问ContainItem,但是还是失败了(这条路可能能行,但我没走通),所以发出来,希望有人看到能解答一下,万分感谢!
#QML的ListView访问代理项内部的function时报错
精简代码
import QtQuick 2.14
Item {
ListModel {
id: myModel
}
ListView {
id: view
width: parent.width
height: parent.height - btn.height
anchors.left: parent.left
anchors.top: parent.top
interactive: false
model: myModel
delegate: myDeletgate
}
Component {
id: myDeletgate
Item {
width: view.width
height: 30
Text {
anchors.left: parent.left
anchors.leftMargin: 10
anchors.verticalCenter: parent.verticalCenter
verticalAlignment: Text.AlignVCenter
text: name
}
function doSomeThing() {
console.log("doSomeThing !!!!!!!!!!!!!!!!!!!!!!!");
}
}
}
Rectangle {
id: btn
width: parent.width
height: 30
anchors.left: parent.left
anchors.bottom: parent.bottom
color: "blue"
MouseArea {
anchors.fill: parent
onClicked: {
console.log("",myModel.get(1).name);//访问
myModel.get(1).name = "666666666666666666666666666";
console.log("",myModel.get(1).name);//修改
myModel.insert(1, {name: qsTr("777777777777777777777777777")});//插入
myModel.remove(2);//删除
myModel.get(1).doSomeThing();//调用方法
}
}
}
Component.onCompleted: {
myModel.append({name: qsTr("111111111111111111111111111")});//追加
myModel.append({name: qsTr("222222222222222222222222222")});
}
}
点下按钮后的提示
qml: 222222222222222222222222222
qml: 666666666666666666666666666
qrc:/MyList.qml:50: TypeError: Property 'doSomeThing' of object QObject(0x5483130) is not a function