QDoubleValidator设置上下限无效的解决方法

采用如下方法对QLineEdit设置浮点数上下限值时,实际运行时会发现不启作用。

QDoubleValidator* v = new QDoubleValidator(-9999,9999,6,this);

QLineEdit  *pLineEdit = new QLineEdit;
pLineEdit->setValidator(v);

解决方法有2:

  方法1:继承重新写

class MyDoubleValidator: public QDoubleValidator
{
public:
	explicit MyDoubleValidator(QObject * parent = 0)
		:QDoubleValidator(parent)
	{

	}

	MyDoubleValidator(double bottom, double top, int decimals, QObject *parent = 0):QDoubleValidator(bottom, top,decimals, parent)
	{
	}

	~MyDoubleValidator() 
	{

	}

	virtual State validate(QString &str, int &i) const
	{
		if (str.isEmpty())
		{
			return QValidator::Intermediate;
		}
		int a = 1;
		bool cOK = false;
		double val = str.toDouble(&cOK);

		if (!cOK)
		{
			return QValidator::Invalid;
		}

		int dotPos = str.indexOf(".");
		if (dotPos > 0)
		{
			if (str.right(str.length() - dotPos-1).length() > decimals())
			{
				return QValidator::Invalid;
			}
		}
		if (val< top() && val > bottom())
		{
			return QValidator::Acceptable;
		}

		return QValidator::Invalid;
	}

	virtual void fixup(QString &s) const
	{
		if( s.toDouble() < bottom() )
		{
			s = QString::number( bottom() );
		}
		else if ( s.toDouble() > top() )
		{
			s = QString::number( top() );
		}
	}
};

方法2:

QDoubleValidator* v = new QDoubleValidator(-9999,9999,6,this);
v->setNotation(QDoubleValidator::StandardNotation);

QLineEdit  *pLineEdit = new QLineEdit;
pLineEdit->setValidator(v);

即增加了“v->setNotation(QDoubleValidator::StandardNotation);”设置。

 

QIntValidator设置方法如上。

  • 5
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值