通过QIntValidator实现最小值的限制

问题:

使用QIntValidator限制QLineEdeit整数输入的最大最小值时,如设置为[20,300],发现最小值仍然可以设置为20以下。

QValidator类相关说明:

QValidator类提供一种验证输入是否有效的方法。

QValidator提供validate和fixup的公有方法:

virtual State validate(QString &, int &) const = 0;  
virtual void fixup(QString &) const;  

 QValidator::validate()是验证的过程,返回结果是State。每当输入有变化时调用此方法。

State验证的结果有三种状态:

enum State {  
    Invalid,        //验证通不过  
    Intermediate,   //输入未完成,不确定是否能通过验证  
    Acceptable      //验证通过 
}

 当验证通不过时,通过调用 QValidator::fixedup()是这个函数修复错误。

然而,QIntValidator中的fixup()函数默认是未作任何处理的。fixup()的解释如下:

fixup() is provided for validators that can repair some user errors. The default implementation does nothing. QLineEdit, for example, will call fixup() if the user presses Enter (or Return) and the content is not currently valid. This allows the fixup() function the opportunity of performing some magic to make an Invalid string Acceptable.

 因此,若要实现一个自定义的验证类,需要从QValidator下派生一个类,并选择性重写validate和fixedup方法。

 

自己重新实现下QIntValidator即可:


class MyValidator : public QIntValidator
{
    Q_OBJECT
public:
    explicit MyValidator(QObject * parent = 0):QIntValidator(parent)
    {
    }
    MyValidator(int bottom, int top, QObject * parent):QIntValidator(bottom, top, parent)
    {
    }
    virtual void setRange(int bottom, int top)
    {
        QIntValidator::setRange(bottom, top);
    }
    ~MyValidator()
    {
    }
    virtual State validate(QString &s, int &n) const
    {
        return QIntValidator::validate(s, n);
    }
    virtual void fixup(QString &s) const
    {
        s = QString("%1").arg(bottom());
    }
};

参考文章:

https://bbs.csdn.net/topics/350177184

https://blog.csdn.net/hfhuazai/article/details/86711903

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值