如何访问List Delegates / ListView之外的项目?

时间:2012-08-11 13:38:38

标签: qml

我是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

1 个答案:

答案 0 :(得分:3)

C ++中QML Component的对应部分是一个类。如您所知,您只能在类'实例 - 对象中更改成员的值。对于组件也是如此:您无法在组件中更改任何内容 - 仅在其实例中。有两种方法可以解决您的问题:

  1. 将listViewdelegate的属性绑定到它之外的某些属性:item_id或listView_Id的属性或其他内容。
  2. 将listViewdelegate的属性绑定到listModeldata元素的某些属性。
  3. 示例:

    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;
            }
        }
    }