Python 带有CheckDelegate项的ListView在滚动时不保留复选框

Python 带有CheckDelegate项的ListView在滚动时不保留复选框,python,listview,pyqt,qml,pyqt5,Python,Listview,Pyqt,Qml,Pyqt5,Holla,我有一个简单的脚本,在GUI中显示100个元素,每个元素都有一个复选框,我可以选中这些复选框,它们会保持选中状态一段时间,但是如果我向上或向下滚动直到它们消失,它们会被重置(有时只会选中第一个元素)。 现在我知道在ListView中,元素一进入视图就会显示出来,我尝试过多种方法,比如增加ListView高度、ContentHeight,但都不起作用。 此问题与RadioDelegate相同 Main.py文件: from PyQt5.QtQml import QQmlApplicat

Holla,我有一个简单的脚本,在GUI中显示100个元素,每个元素都有一个复选框,我可以选中这些复选框,它们会保持选中状态一段时间,但是如果我向上或向下滚动直到它们消失,它们会被重置(有时只会选中第一个元素)。 现在我知道在ListView中,元素一进入视图就会显示出来,我尝试过多种方法,比如增加ListView高度、ContentHeight,但都不起作用。 此问题与RadioDelegate相同 Main.py文件:

from PyQt5.QtQml import QQmlApplicationEngine
from PyQt5.QtGui import QGuiApplication
from PyQt5.QtCore import QObject, QUrl,QTimer
import sys
app = QGuiApplication(sys.argv)
engine = QQmlApplicationEngine('main.qml')
sys.exit(app.exec_())
main.qml:

import QtQuick 2.0
import QtQuick.Controls 2.3
import QtQuick.Layouts 1.3



ApplicationWindow {
    visible: true
    width: 400
    height: 550
    title: qsTr("Ttile")

    ColumnLayout {
        anchors.fill: parent

        ListView {
            id: listView
            objectName : "lvob"
            model: 100
            delegate: CheckDelegate {
                text: modelData
            }
            Layout.fillWidth: true
            Layout.fillHeight: true
            ScrollBar.vertical: ScrollBar {}
        }
    }

}
视频说明:

我做错了什么? 更新:经过进一步研究,我发现我必须将选中的项存储在一个数组中,因为我对python/qml非常陌生,我怎么能做到这一点?
谢谢。

如果对问题进行了分析,会发现如果将列表稍微移动一点并返回初始位置,更改将保留值​​正确,并且当您像在您的案例中那样频繁移动时,更改将丢失

为什么会这样? 造成这种现象的原因是,为了提高效率,ListView有一个名为的属性,它可以保持某些项的持久性

然后,解决方案是将更改保存在另一个元素中,该元素将数据持久存储为:

ApplicationWindow{
可见:正确
宽度:400
身高:550
标题:qsTr(“Ttile”)
列表模型{
id:checkmodel
Component.onCompleted:{
对于(变量i=0;i<100;i++){
append({“name”:i,“value”:false})
}
}
}
列布局{
锚定。填充:父级
列表视图{
id:listView
对象名称:“lvob”
型号:checkmodel
代表:选中代表{
文本:名称
选中:值
onCheckStateChanged:checkmodel.setProperty(索引,“值”,选中)
}
Layout.fillWidth:true
Layout.fillHeight:true
ScrollBar.vertical:ScrollBar{}
}
}
}
其他可能的容器可能使用其他s:

型号:型号

此属性保存为列表提供数据的模型

模型提供用于在中创建项的数据集 景色。可以使用列表模型在QML中直接创建模型, <强> XMListMydie或<强> VisualItMeMeime/Sturk>,或由C++模型类提供。如果使用C++模型类,则它必须是<强> >抽象模型> /St>或简单列表的子类。 另请参见数据模型

ApplicationWindow {
    visible: true
    width: 400
    height: 550
    title: qsTr("Ttile")

    ListModel {
        id: checkmodel
        Component.onCompleted: {
            for(var i = 0; i < 100; i++){
                checkmodel.append({"name": i, "value": false})
            }
        }

    }
    ColumnLayout {
        anchors.fill: parent

        ListView {
            id: listView
            objectName : "lvob"
            model: checkmodel
            delegate: CheckDelegate {
                text: name
                checked: value
                onCheckStateChanged: checkmodel.setProperty(index ,"value", checked)
            }
            Layout.fillWidth: true
            Layout.fillHeight: true
            ScrollBar.vertical: ScrollBar {}
        }
    }
}