带有委托复选框的 QML TableView 无法显示
Posted
技术标签:
【中文标题】带有委托复选框的 QML TableView 无法显示【英文标题】:QML TableView with delegated Checkbox has problems to show the 【发布时间】:2016-06-08 22:09:38 【问题描述】:我创建了一个虚拟ListModel
并将其加载到TableView
:
ListModel
id: testModel
ListElement
status: false
function testFunction()
for (var i = 0; i < 45; i++)
testModel.append();
TableView
model: testModel
TableViewColumn
role: "status"
title: "Activation On/Off"
delegate: Checkbox
id: idDelegatedCheckbox
我假装使用Checkbox
作为委托组件来选择TableView
中的项目。我通过以下方式检查表中的第一项:
选择的第一个项目
然后我向下滚动并返回顶部,我选择的项目消失了,其他项目被选中:
选择了不同的项目
你知道为什么吗?
提前致谢。
【问题讨论】:
嗯,我认为,引用文档,“出于性能原因,创建的委托可以跨多个表行回收。这意味着当您使用隐式属性时,例如styleData.row 或模型,这些值可以在委托构建后更改。” 【参考方案1】:TableView 委托会根据需要进行实例化,并且可以随时回收或销毁。与任何 Qt Quick 项目视图(ListView
、GridView
、PathView
、TableView
...)一样,状态不应存储在委托中。因此,您的 CheckBox
委托必须将其“已检查”状态存储在模型中:
delegate: Checkbox
id: idDelegatedCheckbox
checked: model.checked // read from the model when created or recycled
onCheckedChanged: model.checked = checked // write to the model when checked or unchecked
【讨论】:
这真是太好了,它也适用于 C++ 模型,其中选中的是一些角色名称以上是关于带有委托复选框的 QML TableView 无法显示的主要内容,如果未能解决你的问题,请参考以下文章
QML TableView 鼠标区域不会将点击传播到选择模型
QtQuick TableView CheckBox 委托调用 QAbstractTableModel 的 setData 函数