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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 20:36:00