Qt/QML如何为TableView选中项的TextField单独设置输入掩码
问题根因
你当前的写法将所有第二列TextField的inputMask属性统一绑定到了TableView全局的maskvalue变量,只要该变量更新,所有绑定了它的TextField都会同步修改输入掩码,自然会整列生效。
修复方案
无需单独存储全局掩码变量,直接在第二列的单元格委托中,通过styleData自带的属性判断当前行是否被选中,再动态获取当前行第一列的数值生成对应限制即可,不同行的委托逻辑独立,不会互相影响。
你可以根据需求选择两种实现方式:
方式1:仅限制输入长度(更简单,匹配你的需求)
如果只是需要限制输入字符数和第一列数字相等,直接用maximumLength属性即可,无需使用输入掩码:
// 修正后的第二列委托代码 Component{ id:secondColumnComponent Item { TextField{ text: styleData.value // 仅当前行被选中时应用长度限制,未选中时无限制,可按需调整未选中的默认值 maximumLength: styleData.selected ? peopleModel.get(styleData.row).one : 32767 } } }
方式2:确实需要使用inputMask的实现
如果后续需要扩展格式校验、必须用输入掩码的场景,可以用以下写法:
Component{ id:secondColumnComponent Item { TextField{ text: styleData.value // c代表允许任意字符,重复N次对应长度为N的掩码,未选中时清空掩码 inputMask: styleData.selected ? "c".repeat(peopleModel.get(styleData.row).one) : "" } } }
额外注意
你贴出的原有代码存在括号嵌套错误:第二列的Component声明结束后多了一个闭合括号,导致后面的Gender、Age等列被定义在了TableView外部,需要删掉多余的闭合括号保证结构正确。
内容的提问来源于stack exchange,提问作者Vinay
相关产品推荐
相关产品推荐

