2013-07-09 91 views
0

我如何訪問Text.text項目的ListView代表內從事件處理程序的ListView訪問委託項目,示例代碼(可能有語法錯誤)以下。QML爪哇 - 從事件處理程序

ListView { 
    id: mainLView 
    model: ListViewModel {} 
    delegate: Rectangle { 
     id: theRect 
     Text { 
     id: theText 
     text: "" 
     } 
    } 
    onMovementEnded { 
     //here is where I would like to access the text in Text, e.g 
     theText.text = "New Value" 
    } 
} 

由於無法從事件處理程序訪問文本,因此我的代碼無法使用。我如何完成設置文本值?

編輯:爲了完整性: 我可以將項目添加到通過Java代碼(表觀負載期間)ListView中,通過代碼又名

mainLView.model.append({'name': "First Value","city":"London"}); 
var myValue = model.get(currentIndex).city // or name 
訪問事件內部在ListView的值(一個或多個)

但我仍然無法找到一種方法來爲委託文本{text:「」}賦值。

EDIT 2 7月10日 這裏是什麼,我想實現一個更完整的代碼示例。

ListView { 
    id: mainLView 
    model: ListModel { id: mainModel} 
    delegate: Rectangle { 
     id: theRect 
     Text { 
     id: theText 
     text: nameX 
     } 
    } 
    Component.onCompleted: { 
     for (var x=1; x < 99; x++) { 
      var data = {'nameX': "Name: " + x, "numberX":x}; 
      mainModel.append(data); 
     } 
    } 
    onMovementEnded { 
     //here I want to set the value to numberX e.g (this does not work) 
     theText.text = mainView.model.get(currentIndex).numberX 
    } 
} 
+0

這個問題很難回答,因爲它不清楚你真正想從你的例子中得到什麼。 ListView呈現每個ListModel元素的委託。你在問如何用值更新每個元素或詢問如何更新特定元素?這個問題真的似乎歸結爲你如何指定你想編輯的元素。一旦您向我們提供了這些信息,它可以幫助您獲得索引並進行更新。 – Deadron

+0

Deadron,感謝您的評論。我想在移動結束時更新索引處的值(上面的代碼很簡短,但表明了問題)。 – Nepaluz

+0

我想在信號內移動結束時更新索引值(並因此更新列表視圖)。我的完整代碼實際上有兩個項目給listmodel中的每個元素;我想在列表視圖滾動時顯示一個值,而另一個值則停止顯示,但爲了簡明起見,我縮減了上面的代碼以顯示我需要幫助的位置。讓我知道你是否想要一個更完整的代碼示例。 – Nepaluz

回答

2

鑑於您的意見,我認爲以下可能會做你想做的。

delegate: Rectangle { 
     id: theRect 
     Text { 
     id: theText 
     text: mainLView.moving ? nameX : numberX 
     } 
    } 

這應該顯示ListView移動時的一個值,而不是當移動時不同的值。

+0

這是最優雅的!我實際上已經搜索了更早,並得到了類似的建議,但沒有在ListView ID移動之前!謝謝 – Nepaluz

+0

不客氣! – Deadron

0

將字符串值分配給列表視圖委託中的文本(文本元素)。你可以使用模型的屬性名稱。

如下。這裏的名字來自Jason對象{'name':'First Value','city':'London'});

delegate: Rectangle { 
     id: theRect 
     Text { 
     id: theText 
     text: name // or city 
     } 
    } 

看看這個鏈接(http://kunalmaemo.blogspot.kr/2011/03/creating-custom-listview-delegate-in.html)它會有所幫助。

BTW,以得到代表文本,你需要從模型得到它,你不能從委託得到它,不如授人可重複使用元素列表視圖,其價值不斷變化。

+0

Kunal,你錯過了這個問題。在我上面的編輯中,我提到我已經使用java設置了文本,我想從事件處理函數中設置(更適當地更改)「text:name」的值,即onMovementEnded – Nepaluz

+0

ok,那麼您需要獲取索引元素和更新項目在模型 – Kunal

+0

Kunal,那是問題。你如何獲得上面代碼中的文本索引? – Nepaluz

2

的ListView具有您可以使用當前索引訪問項目的屬性CURRENTITEM。要從委託中訪問某些內容,您的委託需要在其頂級項目中擁有一個屬性,因爲只有這些屬性暴露給外部。這樣的東西應該工作:

ListView { 
    id: mainLView 
    model: ListModel { id: mainModel} 
    delegate: Rectangle { 
     property alias text: theText.text 
     Text { 
     id: theText 
     text: nameX 
     } 
    } 

    onMovementEnded { 
     mainLView.currentItem.text = "foo"; 
    } 
} 
+0

tmcguire,感謝您的貢獻。同樣,我發現了一些類似的用於添加屬性別名的方法,雖然這也起作用,但響應似乎不同步!正確回答這個問題。 – Nepaluz