正则限制
ui.lineEdit_name->setValidator(new QRegularExpressionValidator(QRegularExpression("[A-Za-z0-9-_ ]{0,64}")));
编写Validator子类
主要继承不同Validator类并重写validate方法。例如:
#pragma once
#include <QIntValidator>
class DataCountValidator : public QIntValidator
{
Q_OBJECT
public:
DataCountValidator(QObject* parent);
DataCountValidator(int minimum, int maximum, QObject* parent = Q_NULLPTR);
~DataCountValidator();
protected:
virtual QValidator::State validate(QString& input, int& pos) const override;
};
#include "CustomIntValidator.h"
DataCountValidator::DataCountValidator(QObject* parent)
: QIntValidator(parent)
{
}
DataCountValidator::DataCountValidator(int minimum, int maximum, QObject* parent)
: QIntValidator(minimum, maximum, parent)
{
}
DataCountValidator::~DataCountValidator()
{
}
QValidator::State DataCountValidator::validate(QString& input, int& pos) const
{
QValidator::State ret = QIntValidator::validate(input, pos);
if (input.isEmpty())
{
return ret;
}
//将原本QIntValidator认为可能有效的输入变为无效 更加严格的校验
if (ret == QValidator::Acceptable ||
ret == QValidator::Intermediate)
{
int num = input.toInt();
// 不允许输入0或+开头的数字
if (bottom() > 0 && num == 0)
return QValidator::Invalid;
}
return ret;
}
QValidator::Intermediate表示输入中间状态,需要根据后续输入判断是否变为QValidator::Acceptable或者QValidator::Invalid