带有委托复选框的 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 项目视图(ListViewGridViewPathViewTableView...)一样,状态不应存储在委托中。因此,您的 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 鼠标区域不会将点击传播到选择模型

TableView 的 QML 大小不正确

QtQuick TableView CheckBox 委托调用 QAbstractTableModel 的 setData 函数

带有复选框的 QML 组合框

QML:调整复选框大小

委托通过后无法将数据加载到tableview