Не стирается текст при наличии валидатора и маски в 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 шт):

Автор решения: Main question

В итоге помозговал и понял, что проверять сразу всё валидатором смысла не имеет. 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");
}

И та-дам, всё заработало.

→ Ссылка