我是Qt / QML编码的新手,我在列表视图中访问listdelegate中的元素时遇到了一个问题。
例如,如果我的Qml看起来像这样
Item
{
id: item_id
property int focus_id: 0
function setFocusImageSource() {}
ListView
{
id: listView_Id
delegate: listViewdelegate
model: listModeldata
}
Component
{
id: listViewdelegate
Rectangle
{
id: rectangle_id
Image
{
id: focus_Image
source: x.x
}
}
}
ListModel
{
id: listModeldata
/*elements*/
}
}
现在列表视图的基本功能与我的代码(不是上面的代码)一起正常工作,但是当我进行特定操作时,我需要更改聚焦图像。我想使用函数“setFocusImageSource()”来更改它。我已经尝试使用focus_Image.source =“xx”直接设置图像源。
是否像Rectangle组件中的Image是委托的本地映像,并且无法从ITEM标记访问。如果是这样我如何从上面提到的功能中设置图像。
提前致谢。
Chand.M
答案 0 :(得分:3)
C ++中QML Component的对应部分是一个类。如您所知,您只能在类'实例 - 对象中更改成员的值。对于组件也是如此:您无法在组件中更改任何内容 - 仅在其实例中。有两种方法可以解决您的问题:
示例:
Image {
id: focus_Image
source: x.x // defualt value
Connections {
target: item_id
onFocus_idChanged: {
if ( /* some logic if needed */ ) {
focus_Image.source = xx;
}
}
}
}
或
Image {
id: focus_Image
source: {
// inidicator is a property of the element of listModeldata
if (indicator) {
return xx;
}
}
}