2013-12-12 1 views
4

아래의 checked 속성이 모델의 checked 역할에 바인딩 된 CheckBox가 포함 된 대리자를 사용하여 ListView를 만듭니다. 델리게이트를 클릭하면 모델의 checked 속성을 변경하여 CheckBox 상태를 토글하고 싶습니다. 그러나 checkBox.checkedmodel.checked 사이의 바인딩은 사용자가 대리인을 처음 클릭 할 때만 작동합니다. 그 후에는 값이 항상 확인되고, model.checked 값과 관계가 없습니다. 그 결과 사용자가 확인란을 선택 취소 할 수 없으며이 확인란을 선택하지 않을 수 있습니다.QML ListView의 모델을 변경해도 해당 대리인이 변경되지 않습니다

import QtQuick 2.2 
import QtQuick.Controls 1.1 

ListView { id: listView 
    height: 100 
    width: 100 

    model: ListModel { 
     ListElement { checked: false } 
     ListElement { checked: false } 
    } 

    delegate: Rectangle { 
     width: listView.width 
     implicitHeight: checkBox.implicitHeight * 1.3 

     CheckBox { id: checkBox 
      anchors.fill: parent 
      text: index + 1 
      checked: model.checked 
     } 

     MouseArea { id: mouseArea 
      anchors.fill: parent 
      onClicked: { 
       var item = listView.model.get(index); 

       console.log('old model.checked:', model.checked); 
       item.checked = !item.checked; 
       console.log('new model.checked:', model.checked); 

       console.log('checkBox.checked:', checkBox.checked); 
       console.log('something went wrong:', model.checked !== checkBox.checked); 
      } 
     } 
    } 
} 

내 코드의 문제는 어디에서 발생하며 어떻게 일반 CheckBox처럼 대리인을 작동하게 할 수 있습니까?

답변

6

이것은보고 된 버그입니다 : https://bugreports.qt.io/browse/QTBUG-31627.

해당 버그 보고서의 주석에 설명 된 해결 방법을 사용하면 코드의 확인란이 정상적으로 작동합니다. 나는 checked: model.checked 라인을 제거하고 사각형의 위임에 다음 코드를 추가 :

Binding { 
    target: checkBox 
    property: 'checked' 
    value: model.checked 
} 
+0

을 당신 맞아요, 내가 어떤 모델없이 최소한의 프로젝트에서 버그를 재현 할 수 : https://gist.github.com/webmaster128/7979803 –

관련 문제