我的需求是能够在输入框设置校验,错误的话有提示框和颜色样式的变化,但是不影响输入。
-
写一个继承QLineEdit的类
-
写一个继承Validator的类,然后重写validate方法
- 在validate中使用QRegExp,正则表达式来判断状态
其中正则表达式有一个坑是:我在在线的测试工具中^(-1|0)$|^[1-9]\d*$就可以达到我想要的效果,但是在程序在\d需要再加个\,来表示转换
-
bool isDigital=QString(val).contains(QRegExp("^(-1|0)$|^[1-9]\\d*$")); if(!isDigital) { return QValidator::InValid; }
- 通过validate可以获取三个状态:Intermediate,Invalid和Acceptable
- 其中不影响输入则QLineEdit不要设置setValidator
- 其中提示框和颜色样式的变化
if(state==QValidator::Invalid)
{
this->setToolTip("please input number");//提示框
this->setStyleSheet("QLineEdit{border:2px solid red;border-radius:2px}");
}
else
{
this->setStyleSheet("QLineEdit{border:1px solid green;border-radius:2px}");
}