QComboBox 的 validator 为什么会失效

QComboBox 本来是一个非常简单的控件(类),但如果使用不当还是会带来不少麻烦。问题发生在我设置了它的 Validator 的时候,具体的场景如下:

我设计了一个 QComboBox,包含两个选项:“int” 和 “bit”,当用户选择不同的选项的时候,把这个 QComboBox 设置为 Editable,并且设置 validator 分别为 (0, 100) 和 (0, 1)。可实际情况却不如人意,比如用户选择了“bit”,当前显示的内容为“bit”,但用户可以在后面任意添加字符,不受 validator 的限制,这时我的解决方案是在 QComboBox 的 activate 信号处理槽中讲 EditText 设置为 “0”,表面上看起来是好了,但还有问题:

当用户把内容删除的时候,只要按下的不是“0”和“1”,EditText 就自动变成了“int”(高亮显示),此时又可以随意输入内容了。因为此时 EditText 里面的东西不满足 Validator 的限制,它也就失效了,无法限制用户输入。

但这个问题是怎么来的呢?为什么会显示“int”?原来这里是 QComboBox 的 autocompleter 起了作用。当 QComboBox 为可以编辑时,它自动会生成一个“自动完成”功能,自动帮你填入可能的选择值,可这个自动完成却不受 validator 的限制。也许这算是一个 bug,但其实解决起来很简单:只要在 setEditable() 之后加入 setCompleter(0)就可以了。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值