В модальном окне есть два поля ввода QLineEdit. В первом вводится количество элементов и на него установлен QIntValidator, то есть кроме целого числа там ничего лежать не может. Во втором должны записываться вещественные значения через запятую с пробелом в количестве из числа из первого поля.
Нужно, чтобы после ввода, т.е. по потере фокуса, происходила проверка корректности ввода во втором поле. Если ввод корректный, то ничего не выводить, если в строке помимо вещественных чисел ещё какая-то бурда, то возмутиться, если там только вещественные значения, но их не нужное количество, то легко намекнуть дописать.
Создал свой класс-наследник от валидатора, где произвожу проверку ввода, и установил этот валидатор во второе поле ввода:
QValidator::State CustomValidator::validate(QString &str, int &pos) const {
QStringList nomTimes;
int flowQuantity = pos;
flowQuantity = parameters->getFlowQnt();
QRegExp regExp("^(\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?)(?:,\\h(?1))*$");
if (!regExp.exactMatch(str)) {
//QMessageBox::critical(this->parameters, "Некорректный ввод", "Введите вещественные числа, разделяя их запятой с пробелом!");
return QValidator::Invalid;
} else {
nomTimes = regExp.capturedTexts();
if (nomTimes.size() != flowQuantity) {
//QMessageBox::critical(this->parameters, "Некорректный ввод", "Количество введённых значений не соответсвтует количеству требуемых элементов");
return QValidator::Intermediate;
} else {
return QValidator::Acceptable;
}
}
}
Ну а дальше:
void ParametersWindow::on_tauFlow_line_editingFinished()
{
if (!ui->tauFlow_line->hasAcceptableInput()) {
QMessageBox::critical(this,"Ошибка ввода", "Введите корректные данные");
ui->tauFlow_line->clear();
ui->tauFlow_line->setFocus();
}
}
Проблемы:
Если я в чём-то ошибаюсь — поправьте. Если совсем не так это делается — подскажите, как реализовать.
UPD1:
Первая проблема решилась отключением валидатора. Соответственно проверка корректности ввода из validate
перешла в on_tauFlow_line_editingFinished()
Виртуальный выделенный сервер (VDS) становится отличным выбором
Написала функцию Hight(int r, int *mas), которая должна вычислять высоту дереваДерево представляется в виде массива чисел, где mas[i] = это родитель i - го ребенка
Есть мысль написать ремапер мышиНо для этого необходимо отменять определённые действия мыши
Подскажите пожалуйста, как установить сортировку компонентов в пакете по типуРаботаю в IDE NetBenas