⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qvalidator.cpp

📁 qt-x11-opensource-src-4.1.4.tar.gz源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/*!    \class QDoubleValidator    \brief The QDoubleValidator class provides range checking of    floating-point numbers.    \ingroup misc    QDoubleValidator provides an upper bound, a lower bound, and a    limit on the number of digits after the decimal point. It does not    provide a fixup() function.    You can set the acceptable range in one call with setRange(), or    with setBottom() and setTop(). Set the number of decimal places    with setDecimals(). The validate() function returns the validation    state.    \sa QIntValidator QRegExpValidator*//*!    Constructs a validator object with a \a parent object    that accepts any double.*/QDoubleValidator::QDoubleValidator(QObject * parent)    : QValidator(parent){    b = -HUGE_VAL;    t = HUGE_VAL;    d = 1000;}/*!    Constructs a validator object with a \a parent object. This    validator will accept doubles from \a bottom to \a top inclusive,    with up to \a decimals digits after the decimal point.*/QDoubleValidator::QDoubleValidator(double bottom, double top, int decimals,                                    QObject * parent)    : QValidator(parent){    b = bottom;    t = top;    d = decimals;}#ifdef QT3_SUPPORT/*!  \obsolete    Constructs a validator object with a \a parent object and a \a name    that accepts any double.*/QDoubleValidator::QDoubleValidator(QObject * parent, const char *name)    : QValidator(parent){    setObjectName(QString::fromAscii(name));    b = -HUGE_VAL;    t = HUGE_VAL;    d = 1000;}/*!  \obsolete    Constructs a validator object with a \a parent object, called \a    name. This validator will accept doubles from \a bottom to \a top    inclusive, with up to \a decimals digits after the decimal point.*/QDoubleValidator::QDoubleValidator(double bottom, double top, int decimals,                                    QObject * parent, const char* name)    : QValidator(parent){    setObjectName(QString::fromAscii(name));    b = bottom;    t = top;    d = decimals;}#endif/*!    Destroys the validator.*/QDoubleValidator::~QDoubleValidator(){}/*!    \fn QValidator::State QDoubleValidator::validate(QString &input, int &pos) const    Returns \l Acceptable if the string \a input contains a double    that is within the valid range and is in the correct format.    Returns \l Intermediate if \a input contains a double that is    outside the range or is in the wrong format; e.g. with too many    digits after the decimal point or is empty.    Returns \l Invalid if the \a input is not a double.    Note: If the valid range consists of just positive doubles (e.g. 0.0 to 100.0)    and \a input is a negative double then \l Invalid is returned.    By default, the \a pos parameter is not used by this validator.*/QValidator::State QDoubleValidator::validate(QString & input, int &) const{    QRegExp empty(QString::fromLatin1("-?\\.?"));    if (input.contains(' '))        return Invalid;    if (b >= 0 && input.startsWith(QLatin1Char('-')))        return Invalid;    if (empty.exactMatch(input))        return Intermediate;    bool ok = true;    double entered = input.toDouble(&ok);    int nume = input.count('e', Qt::CaseInsensitive);    if (!ok) {        // explicit exponent regexp        QRegExp expexpexp(QString::fromLatin1("[Ee][+-]?(\\d*)$"));        int eePos = expexpexp.indexIn(input);        if (eePos > 0 && nume == 1) {            QString mantissa = input.left(eePos);            entered = mantissa.toDouble(&ok);            if (!ok)                return Invalid;            if (expexpexp.cap(1).isEmpty())                return Intermediate;        } else if (eePos == 0) {            return Intermediate;        } else {            return Invalid;        }    }    int i = input.indexOf('.');    if (i >= 0 && nume == 0) {        // has decimal point (but no E), now count digits after that        i++;        int j = i;        while(input[j].isDigit())            j++;        if (j - i > d)            return Intermediate;    }    if (entered < b || entered > t)        return Intermediate;    return Acceptable;}/*!    Sets the validator to accept doubles from \a minimum to \a maximum    inclusive, with at most \a decimals digits after the decimal    point.*/void QDoubleValidator::setRange(double minimum, double maximum, int decimals){    b = minimum;    t = maximum;    d = decimals;}/*!    \property QDoubleValidator::bottom    \brief the validator's minimum acceptable value    \sa setRange()*/void QDoubleValidator::setBottom(double bottom){    setRange(bottom, top(), decimals());}/*!    \property QDoubleValidator::top    \brief the validator's maximum acceptable value    \sa setRange()*/void QDoubleValidator::setTop(double top){    setRange(bottom(), top, decimals());}/*!    \property QDoubleValidator::decimals    \brief the validator's maximum number of digits after the decimal point    \sa setRange()*/void QDoubleValidator::setDecimals(int decimals){    setRange(bottom(), top(), decimals);}/*!    \class QRegExpValidator    \brief The QRegExpValidator class is used to check a string    against a regular expression.    \ingroup misc    QRegExpValidator uses a regular expression (regexp) to    determine whether an input string is \l Acceptable, \l    Intermediate, or \l Invalid. The regexp can either be supplied    when the QRegExpValidator is constructed, or at a later time.    The regexp is treated as if it begins with the start of string    assertion, \bold{^}, and ends with the end of string assertion    \bold{$} so the match is against the entire input string, or from    the given position if a start position greater than zero is given.    For a brief introduction to Qt's regexp engine see \l QRegExp.    Example of use:    \code    // regexp: optional '-' followed by between 1 and 3 digits    QRegExp rx("-?\\d{1,3}");    QValidator *validator = new QRegExpValidator(rx, this);    QLineEdit *edit = new QLineEdit(this);    edit->setValidator(validator);    \endcode    Below we present some examples of validators. In practice they would    normally be associated with a widget as in the example above.    \code    // integers 1 to 9999    QRegExp rx("[1-9]\\d{0,3}");    // the validator treats the regexp as "^[1-9]\\d{0,3}$"    QRegExpValidator v(rx, 0);    QString s;    int pos = 0;    s = "0";     v.validate(s, pos);    // returns Invalid    s = "12345"; v.validate(s, pos);    // returns Invalid    s = "1";     v.validate(s, pos);    // returns Acceptable    rx.setPattern("\\S+");            // one or more non-whitespace characters    v.setRegExp(rx);    s = "myfile.txt";  v.validate(s, pos); // Returns Acceptable    s = "my file.txt"; v.validate(s, pos); // Returns Invalid    // A, B or C followed by exactly five digits followed by W, X, Y or Z    rx.setPattern("[A-C]\\d{5}[W-Z]");    v.setRegExp(rx);    s = "a12345Z"; v.validate(s, pos);        // Returns Invalid    s = "A12345Z"; v.validate(s, pos);        // Returns Acceptable    s = "B12";     v.validate(s, pos);        // Returns Intermediate    // match most 'readme' files    rx.setPattern("read\\S?me(\.(txt|asc|1st))?");    rx.setCaseSensitive(false);    v.setRegExp(rx);    s = "readme";      v.validate(s, pos); // Returns Acceptable    s = "README.1ST";  v.validate(s, pos); // Returns Acceptable    s = "read me.txt"; v.validate(s, pos); // Returns Invalid    s = "readm";       v.validate(s, pos); // Returns Intermediate    \endcode    \sa QRegExp QIntValidator QDoubleValidator*//*!    Constructs a validator with a \a parent object that accepts    any string (including an empty one) as valid.*/QRegExpValidator::QRegExpValidator(QObject *parent)    : QValidator(parent), r(QString::fromLatin1(".*")){}/*!    Constructs a validator with a \a parent object that    accepts all strings that match the regular expression \a rx.    The match is made against the entire string; e.g. if the regexp is    \bold{[A-Fa-f0-9]+} it will be treated as \bold{^[A-Fa-f0-9]+$}.*/QRegExpValidator::QRegExpValidator(const QRegExp& rx, QObject *parent)    : QValidator(parent), r(rx){}#ifdef QT3_SUPPORT/*!  \obsolete    Constructs a validator with a \a parent object and \a name that accepts    any string (including an empty one) as valid.*/QRegExpValidator::QRegExpValidator(QObject *parent, const char *name)    : QValidator(parent), r(QString::fromLatin1(".*")){        setObjectName(QString::fromAscii(name));}/*!  \obsolete    Constructs a validator with a \a parent object and a \a name that    accepts all strings that match the regular expression \a rx.    The match is made against the entire string; e.g. if the regexp is    \bold{[A-Fa-f0-9]+} it will be treated as \bold{^[A-Fa-f0-9]+$}.*/QRegExpValidator::QRegExpValidator(const QRegExp& rx, QObject *parent,                                    const char *name)    : QValidator(parent), r(rx){        setObjectName(QString::fromAscii(name));}#endif/*!    Destroys the validator.*/QRegExpValidator::~QRegExpValidator(){}/*!    Returns \l Acceptable if \a input is matched by the regular    expression for this validator, \l Intermediate if it has matched    partially (i.e. could be a valid match if additional valid    characters are added), and \l Invalid if \a input is not matched.    The \a pos parameter is set to the length of the \a input parameter.    For example, if the regular expression is \bold{\\w\\d\\d}    (word-character, digit, digit) then "A57" is \l Acceptable,    "E5" is \l Intermediate, and "+9" is \l Invalid.    \sa QRegExp::exactMatch()*/QValidator::State QRegExpValidator::validate(QString &input, int& pos) const{    if (r.exactMatch(input)) {        return Acceptable;    } else {        if (const_cast<QRegExp &>(r).matchedLength() == input.size()) {            return Intermediate;        } else {            pos = input.size();            return Invalid;        }    }}/*!    \property QRegExpValidator::regExp    \brief the regular expression used for validation*/void QRegExpValidator::setRegExp(const QRegExp& rx){    r = rx;}#endif#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -