2013-07-09 5 views
0

아래 예제 코드 (구문 오류가있을 수 있음)의 ListView에 대한 이벤트 처리기에서 ListView 대리자의 Text.text 항목에 어떻게 액세스합니까?QML Java - 이벤트 처리기에서 델리게이트 항목에 액세스

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

theText는 이벤트 처리기에서 액세스 할 수 없으므로 작동하지 않는 코드는 작동하지 않습니다. 텍스트 값을 어떻게 설정합니까?

편집 : 나는 (응용 프로그램 부하시) 자바 코드를 통해 ListView에 항목을 추가 할 수 있습니다, 코드 일명

mainLView.model.append({'name': "First Value","city":"London"}); 
var myValue = model.get(currentIndex).city // or name 
을 통해 이벤트 내부의 ListView의 값 (들)에 액세스 : 완성도를 들어

하지만 위임자 Text {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

데드론, 코멘트 주셔서 감사합니다. 움직임이 끝나면 인덱스의 값을 업데이트하려고합니다 (위의 코드는 간단하지만 문제를 보여줍니다). – Nepaluz

+0

움직임이 신호 내부에서 끝나고 (따라서리스트 뷰를 업데이트 할 때) 인덱스에서 값을 업데이트하려고합니다. 내 전체 코드는 실제로 listmodel의 각 요소에 두 개의 항목이 있습니다. 목록보기가 롤링 될 때 하나의 값을 표시하고 중지 할 때 다른 값을 표시하고 싶지만, 간결성을 위해 위의 코드를 사용하여 도움이 필요한 위치 만 표시하도록했습니다. 보다 완벽한 코드 예제를 원한다면 알려주십시오. – Nepaluz

답변

2

내 생각에 다음과 같이하면 좋을 것 같습니다. 그렇지 않은 경우

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

이리스트 뷰가 이동 값과 다른 하나 중 하나를 표시한다.

+0

이것은 우아하게 가장 잘합니다! 나는 실제로 이전에 봤 거든 비슷한 제안을 가지고 있지만 listview ID와 함께 이동하기 전에하지 않았다! 감사합니다 – Nepaluz

+0

당신은 오신 것을 환영합니다! – Deadron

0

목록보기 대리인의 텍스트 (텍스트 요소)에 문자열 값을 할당하려면. 모델의 속성 이름을 사용할 수 있습니다.

다음과 같습니다. 여기서 name은 Jason object { '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)를 확인하십시오.

대표자로부터 텍스트를 가져 오려면 모델에서 가져와야합니다. 위임자는 listview에서 재사용 가능한 요소이므로 그 값은 계속 변경됩니다.

+0

Kunal, 질문을 놓쳤습니다.위의 편집에서 자바를 사용하여 텍스트를 이미 설정했다고 언급 했으므로 이벤트 핸들러 내부에서 "텍스트 : 이름"값을 설정 (더 적절하게 변경)하고 싶습니다. 예 : onMovementEnded – Nepaluz

+0

확인을 클릭 한 다음 인덱스를 가져와야합니다. 요소 및 업데이트 항목 모델 – Kunal

+0

Kunal, 그 질문했다. 위의 코드에서 Text 인덱스를 어떻게 구합니까? – 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