更改QML ListView的模型不会更改相应的委托

sil*_*gan 4 qt qml qt-quick qtquick2

下面我创建一个ListView,其中包含一个CheckBox,其checked属性绑定到模型的checked角色.单击委托时,我想通过更改模型的checked属性来切换CheckBox状态.但之间的结合checkBox.checkedmodel.checked工程仅在第一次用户点击该委托.之后,checkBox始终检查,与model.checked值无关.结果是用户无法取消选中该复选框,我不希望这样.

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);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我的代码中的问题在哪里?如何使委托像普通的CheckBox一样工作?

sil*_*gan 6

这是一个报告的错误:https://bugreports.qt.io/browse/QTBUG-31627.

使用该错误报告下的注释中描述的walkaround使我的代码中的复选框正常工作.我删除了该checked: model.checked行并将以下代码添加到Rectangle委托:

Binding {
    target: checkBox
    property: 'checked'
    value: model.checked
}
Run Code Online (Sandbox Code Playgroud)