Проверка возраста при использовании редактирования строки в qt

0

Привет, ребята, я придумал еще одну проблему, вот мой пример кода:

QValidator *m_validator = new QIntValidator(18, 75, this);
QLineEdit *m_edit = new QLineEdit(this);
m_edit->setValidator(m_validator);

проблема здесь в том, что я не хочу идти на SpinBox. Я хочу проверить эту строку только для редактирования, но здесь диапазон не работает в диапазоне, если я даю 1, это также позволяет мне знать, что функция lineEdit работает на ввод с клавиатуры одним символом, но мне нужно получить целое число от редактирования строки и проверить его, я попробовал SIGNAL as

void    editingFinished ()

но проблема все еще не подтверждается моим возрастом.

  • 0
    Потому что 1 можно продолжать до 18 ? Одним из альтернативных методов является QValidator подкласса QValidator и проверка в виртуальных методах.
  • 0
    да, я знаю это, но мне нужно это преодолеть, поэтому создание нашего собственного QValidator также не решает проблему, так как редактирование моей строки все еще не проверяется.
Показать ещё 1 комментарий
Теги:
qt

1 ответ

0

Лучше всего, вероятно, подклассифицировать QValidator следующим образом:

qagevalidator.h

class QAgeValidator : public QValidator
{
    Q_OBJECT
    Q_DISABLE_COPY(QAgeValidator )

    quint16 low, high;

public:
    explicit QAgeValidator(quint16 low, quint16 high, QObject *parent = 0);
    virtual ~QAgeValidator();

    virtual QValidator::State validate(QString &, int &) const;
    virtual void fixup(QString &) const;
};

И переопределите виртуальные функции следующим образом:

QValidator::State QAgeValidator::validate(QString &input, int &) const
{
    if (input.isEmpty())
        return Acceptable;

    quint16 i = input.toInt();
    if (!isdigit(i) || (i < low || i > high))
        return Invalid;

    return Acceptable;
}

Здесь вы должны выполнить проверку возраста:

void QAgeValidator::fixup(QString &input) const
{
    QString final;

    for (int i = 0; i < input.length(); ++i) {
        QChar c = input.at(i);
        if (c.isDigit())
             final += c;
    }

    input = final;
}
  • 0
    я попробовал ваш код, но проблема в том, что если я ввожу 11 в первый раз, это показывает, что это неприемлемо, но если я снова даю низкое значение, оно принимает значение, которое я проверял с помощью hasAcceptableInput (), это правда.
  • 0
    все танки, но я получил подтверждение с помощью сигнала editfinished (), а затем проверил вручную значение

Ещё вопросы

Сообщество Overcoder
Наверх
Меню