Не стирается текст при наличии валидатора и маски в QT
ui->lineEdit_4->setInputMask("+7(000)000-00-000");
написал regexp для валидатора, совместил:
QRegularExpression numberRegex ("^\\+\\d{1,1}\\(\\d{1,3}\\)\\d{1,3}\\-\\d{1,2}\\-\\d{1,2}$");
QRegularExpressionValidator *numberValidator = new QRegularExpressionValidator (numberRegex);
ui->lineEdit_4->setValidator(numberValidator);
ui->lineEdit_4->setInputMask("+7(000)000-00-00");
Но нарисовалась проблема. Вводится всё правильно, корректно. При сохранении данных вывожу ошибку, если текст введен так, что валидатору не нравится, но: Если ввести последнюю цифру(11-ую), то после этого блокируется возможность стирать. То есть пишу номер, ошибся, стер, исправил, продолжил. Но если ввести последнюю, такой возможности нет. Дальнейшее изменение номера доступно только "переключением стрелочек" и изменением уже существующей цифры. UPD: проблема фиксится, если в конец маски добавить еще один 0, так стирать текст можно НА ЛЮБОМ этапе написания, но чёрт побери, мне этот 0 в конце не нужен, нужен корректный номер) Мб ошибка в валидаторе или в маске? как быть?
Ответы (1 шт):
В итоге помозговал и понял, что проверять сразу всё валидатором смысла не имеет. LineEdit оставил просто с маской
ui->lineEdit_4->setInputMask("+7\\(999\\)999\\-99\\-99;_");
Никаких проверок на данном этапе нет. Редактирование строки в любой момент разрешено. После чего, при нажатии кнопки сохранить идет проверка валидности этой строчки. А именно:
QString a = ui->lineEdit_4->text();
int b = ui->lineEdit_4->cursorPosition();
if(numberValidator->validate(a, b) == QValidator::Acceptable){
DataBase::InsertToDataBase(ui->lineEdit_2->text(),ui->lineEdit_4->text(), ui->lineEdit_5->text(), ui->textEdit->toPlainText());
} else {
QMessageBox::warning(this, "Ошибка", "Проверьте правильность введенного номера телефона. \n");
}
И та-дам, всё заработало.