QML 5中如何在DelegateChooser中使用列号作为角色匹配对应委托
QML 5 DelegateChooser按列号匹配委托解决方案
错误原因
你的原有写法存在两个核心问题导致匹配失效:
DelegateChooser的role属性仅需填写数据模型的角色名,不需要加model.前缀- 列号是数值类型,你给
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
相关产品推荐
相关产品推荐

