我试图从C更改qml listview的委托,但目前我坚持如何更改代表委托属性的别名 .
Update on details: 我在分开的qml文件中有多个代理,在我的应用程序中有很多屏幕,每个屏幕都有不同的listview UI,我想要的是:
将委托文件名传递给C函数>>> C函数集listView的委托属性(或类似的东西)>>> listview加载相应的委托 .
我的qml文件如下所示:
Item {
id: root
property alias listViewDelegate: listView.delegate
ListView{
id: listView
delegate: MyDelegate{} // I have MyDelegate.qml file, it's working well
model: listModel
}
// List model
MyListModel {
id: listModel
}
}
我尝试使用setProperty()方法从C更改listViewDelegate别名但没有运气(实际上是错误) .
qmlObj->setProperty("listViewDelegate", componentDelegate);
怎么做到这一点?或者任何人都可以建议我更好的方法来实现它?谢谢!
3 回答
我认为有更好的方法来做到这一点 .
脚步:
1)在c侧创建模型 .
2)通过setContextProperty将Model对象传递给qml
3)在Model.status上绑定ListView的委托
4)现在你可以通过c侧的setStaus()更改委托 .
必须将属性listViewDelegate分配给ListView,以便在修改ListViewDelegate属性时,将通知ListView并更新委托 .
感谢大家,我只想通过使用javascript找到一种方法,看起来很复杂,但它确实有效 .
我将这个javascript函数添加到我的根项目中
然后我从C调用此函数,参数是委托qml文件 . 它看起来像这样:
How to invoke qml javascript method