Привет, ребята, я придумал еще одну проблему, вот мой пример кода:
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 ()
но проблема все еще не подтверждается моим возрастом.
Лучше всего, вероятно, подклассифицировать 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;
}
1
можно продолжать до18
? Одним из альтернативных методов являетсяQValidator
подклассаQValidator
и проверка в виртуальных методах.