You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

QML 5中如何在DelegateChooser中使用列号作为角色匹配对应委托

QML 5 DelegateChooser按列号匹配委托解决方案

错误原因

你的原有写法存在两个核心问题导致匹配失效:

  1. DelegateChooser的role属性仅需填写数据模型的角色名,不需要加model.前缀
  2. 列号是数值类型,你给roleValue加了引号后变成字符串匹配,自然无法和数值类型的列号匹配成功

推荐解决方案(适配性最高)

直接使用DelegateChoice的when条件匹配列号,不需要额外在数据模型中暴露列号角色:

DelegateChooser {
    id: chooser
    DelegateChoice { 
        when: index.column === 0
        ItemDelegate { /* 第一列字符串展示逻辑 */ } 
    }
    DelegateChoice { 
        when: index.column === 1
        SwitchDelegate { /* 第二列勾选框展示逻辑 */ } 
    }
    DelegateChoice { 
        when: index.column === 2
        SwipeDelegate { /* 第三列图片展示逻辑 */ } 
    }
}

原有写法修正方案

如果你坚持使用role匹配的方式,需要先确保你的数据模型已经将列号作为column角色对外暴露,再修改代码如下:

DelegateChooser {
    id: chooser
    role: "column" // 移除model.前缀,仅填写角色名
    DelegateChoice { roleValue: 0; ItemDelegate { ... } } // 移除引号,使用数值匹配
    DelegateChoice { roleValue: 1; SwitchDelegate { ... } }
    DelegateChoice { roleValue: 2; SwipeDelegate { ... } }
}

注意事项

  • 如果你使用的是Qt Quick Controls 1版本的DelegateChooser,将roleValue属性替换为value即可正常匹配
  • 优先使用when条件写法,不需要额外改造数据模型,适配不同表格场景的成本更低

内容的提问来源于stack exchange,提问作者TSG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 20:15:03