简介
总结项目中遇到的一些问题,重写QLineEdit 实现这一功能。
1. 想在QSpinBox中设置一个输入前的提示框,但是其没有setPlaceHolderText方法,用setToolTip设置悬浮提示框只能放在控件上才能显示。
2. 用QLineEdit可以用setPlaceHolderText来设置输入前的提示框,又没有可以设置大小范围的方法。于是想到可以利用正则表达式来实现。
一、运行效果
如果是使用QDoubleSpinBox只能有的效果图:
只有鼠标移动到控件位置才行,不是想要的效果。
二、提出问题
- QLineEdit可以输入任意字符,包括数字和文字,所以要实现只输入某一范围的数值,一开始想到用Qt内置的QDoubleValidator来实现输入0.0-100.0的浮点型数值,不知道是不是Qt的Bug,这个设置实现不了输入的限制。
//设置输入范围,实现输入框只能输入0.0-100.0且小数点后两位
QDoubleValidator *validator = new QDoubleValidator(0.0, 100.0, 2);
m_myLineEdit->setValidator(validator);
效果图可知输入100之后再输入也是可以的,可自行尝试。
QIntValidator *validator = new QIntValidator(0, 100);
m_myLineEdit->setValidator(validator);
QIntValidator设置成0-100,在输入小于100的数值后,再输入还是可以输入。
解决方法
- 既然输入的值可以显示超出设置的范围,想到可以重写一个QLineEdit,设置一个最大最小值,然后每次输入判断输入的值是否在这个范围内,不在则清空输入框。
MyLineEdit.h
#include <QWidget>
#include <QLineEdit>
class MyLineEdit : public QLineEdit
{
Q_OBJECT
public:
explicit MyLine