![e5b69ab05bc03863d75c6f82ba1b51f9.png](https://img-blog.csdnimg.cn/img_convert/e5b69ab05bc03863d75c6f82ba1b51f9.png)
前言
最近做了一个小的上位机,要通过串口来下发几个时间参数,为了防止误输入,产生不必要的麻烦,我把输入范围限制在0-680的浮点型数据,支持小数点后2位。学习了一下QLineEdit类是如何限制输入类型的。本来是想写一个函数,在下发参数时,传QLineEdit的字符串参数进去,然后判断是否合法,如果不合法,则不下发参数,请用户修改后再确认。这么做也实现了,但是想Qt这么强大,应该会考虑到这一点的,所以找了个更简单,在输入的时候就限制数据的类型,不合法的根本输入不进去。
关于QLineEdit类
QlineEdit是一个单行文本输入框,支持撤销、重做、复制、粘贴、拖放等操作,echomode模式支持,即只写模式,可以输入密码等不可见的文本,官方介绍:QLineEdit Class
可以通过setValidator函数来限制数据类型,
setValidator函数的参数是QValidator,主要有3种:
- QIntValidator //限制只能输入整数,限制范围
- QDoubleValidator //限制只能输入浮点数,包括范围,小数点位数
- QRegExpValidator //限制规则按指定的正则表达式
Amazing!QDoubleValidator不就是我想要的吗?但是经过实际测试发现,其中QDoubleValidator可以限制浮点型数据和输入的小数位数,但是并不能限制输入范围,也就是setRange,setBottom,setTop这些函数的设置并没有生效,这难道是Qt的一个Bug?我的Qt版本是5.8.0,Qt Creator版本是4.2.1,而QRegExpValidator的使用就很强大了,需要了解正则表达式的相关知识。下面来详细介绍一下这三种类的使用。
QIntValidator Class
- 功能
限制QLineEdit只能输入int类型数据,即整型数据,包含正负整数和0
- 相关函数
c++ //限制数据范围 QIntValidator(int minimum, int maximum, QObject *parent = Q_NULLPTR) //获取最小值 int bottom() //设置最小值 void setBottom(int) //设置数据范围 void setRange(int bottom, int top) //设置最大值 void setTop(int) //获取最大值 int top() const