2012-08-11 72 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; 
     } 
    } 
}