QML使用DoubleValidator时输入框失焦小数自动转整数问题
问题原因
这是QML DoubleValidator默认配置下的已知逻辑问题,触发时机是TextField失焦时自动执行的验证器修正流程:
- 未手动配置参数的DoubleValidator,默认解析逻辑存在判断分支缺陷:对
0.开头、小数点后带任意个连续0再接非零数字的输入串,会错误判定小数点为无效输入字符直接剔除,最终把剩余数字按整数返回,就会出现0.2变2、0.0005变5的现象。 - 当你在非零数字后再追加任意数字时,输入串长度会触发解析逻辑的小数位识别分支,小数点不会被剔除,所以数值能被正常解析。
修复方法
不要只空挂DoubleValidator控件,显式配置核心参数即可解决问题,参考代码如下:
TextField { placeholderText: "请输入双精度浮点数" validator: DoubleValidator { // 按业务需求设置允许的数值范围,示例为双精度浮点数的上下限 bottom: -Number.MAX_VALUE top: Number.MAX_VALUE // 按业务需求设置允许保留的最大小数位数 decimals: 10 // 指定数值记法,不需要科学计数法就用StandardNotation notation: DoubleValidator.StandardNotation } }
多语言适配场景下,记得给DoubleValidator绑定和TextField一致的
locale属性,避免不同区域小数分隔符规则差异(部分地区用逗号作为小数分隔符)导致的解析异常。
内容的提问来源于stack exchange,提问作者f-ij
相关产品推荐
相关产品推荐

