Qml 在GridView中访问委托函数

Qml 在GridView中访问委托函数,qml,Qml,我有一个GridView,它使用DelegateModel作为其模型: GridView{ function test(idx) { model.items.get(idx).testFunction() } model: DelegateModel{ id: visualModel model: myModel delegate: myItem {} } } 如果知道委托的索引,如何调用委托的函数或

我有一个GridView,它使用DelegateModel作为其模型:

GridView{
    function test(idx) {
       model.items.get(idx).testFunction()
    }
    model: DelegateModel{
        id: visualModel
        model: myModel
        delegate: myItem {}
    }
}
如果知道委托的索引,如何调用委托的函数或设置委托的属性

例如,如果我试图调用函数
test
,我会得到错误

TypeError:对象[object object]的属性“testFunction”不是函数

我不明白。这是我的代表的顶部

Item {
  id: delegateRoot
  function testFunction() {
    console.log("success")
  }

那么,
model.items.get(idx)
行是否错误?另外,我如何检查/调试这是否真的给了我委托?

您正在调用模型上的函数。但它位于视图的委托中,因此无法找到它

特别地,我不知道如何从视图中获取代理的解决方案。这里的问题可能是,在您尝试调用委托时,委托甚至还没有被创建

对于
中继器
您可以轻松调用
itemAt(index)
来获取它-因为
中继器总是为模型中的所有内容实例化委托

很可能您希望重构,这样函数就不再是委托的成员,而只需获取模型数据(您可以通过
get
从模型中检索)并通过模型中的角色操纵委托即可

例如,您可以有一个“触发器”角色。在委托中,将函数连接到已更改的信号,并在需要调用函数时在模型中增加该触发器