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

 承诺盛金_999 发布于 2023-02-11 10:55

下面我创建一个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);
            }
        }
    }
}

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

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有