2012-08-11 74 views
3

我相信新的QT/QML编码和我面临的一个问题相对于访问在listdelegate中的元素列表视图。如何访问项目的ListDelegates/ListView控件之外呢?

例如,如果我设为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”的图像源。

是不是像矩形组件内的图像是本地的委托,不能从项目标签访问。如果是的话我怎样才能从上面提到的功能设置图像。

在此先感谢。

Chand.M

回答

3

C++中QML组件的一个对象是一个类。如你所知,你只能在类的实例 - 对象中改变成员的值。对于组件也是如此:您不能在组件中更改任何内容 - 仅在其实例中。有两种可能的解决你的问题:它外面listViewdelegate的

  1. 绑定属性某些属性:的ITEM_ID或listView_Id或别的东西财产。
  2. listViewdelegate的绑定属性listModeldata的元素的某些属性。

实例:

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