gpt4 book ai didi

python - 带有 CheckDelegate 项目的 ListView 在滚动时不保留选中的复选框

转载 作者:太空宇宙 更新时间:2023-11-03 15:46:34 25 4
gpt4 key购买 nike

Holla,所以我有这个简单的脚本,它在 GUI 中显示 100 个元素,每个元素都有一个复选框,我可以选中这些框,它们会保持选中状态一段时间,但是如果我向上或向下滚动直到它们消失看来他们将被重置(有时只会检查第一个元素)。现在我知道在 ListView 中,元素一旦进入 View 就会显示出来,我已经尝试了多种方法,例如增加 ListView 高度、ContentHeight,但没有任何效果。这个问题是相同的,例如 RadioDelegate主.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_())

主.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 {}
}
}

}

视频说明:Click Me

我做错了什么?更新:经过更多研究后,我发现我必须将选中的项目存储在数组中,因为我对 python/qml 还很陌生,我该怎么做?谢谢。

最佳答案

如果对问题进行分析,可以观察到,如果您稍微移动列表并返回到初始位置,所做的更改将使值保持正确,并且当您像您的情况那样移动很多时,更改是丢失的。

为什么会这样?

出现这种现象是因为ListView为了提高效率有一个属性叫cacheBuffer这使一些项目持久化。

然后,解决方案是将更改保存在一些其他元素中,这些元素将数据持久存储为 ListModel。 :

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

其他可能的容器可能正在使用其他 model小号:

model : model

This property holds the model providing data for the list.

The model provides the set of data that is used to create the items in the view. Models can be created directly in QML using ListModel, XmlListModel or VisualItemModel, or provided by C++ model classes. If a C++ model class is used, it must be a subclass of QAbstractItemModel or a simple list.

See also Data Models.

关于python - 带有 CheckDelegate 项目的 ListView 在滚动时不保留选中的复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49602337/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com