День добрый.
Конечная цель - получить сигнал, что в QLineEdit была попытка ввода запрещенного символа.
Самым обычным способом прицеплял QRegExpValidator:
QRegExp re("[^(A-Za-z)]"); // например, просто запрещение английских символов
QValidator *val = new QRegExpValidator(re,0);
ui->lineEdit->setValidator(val);
Все работает, все отлично. Но как отследить ? Сигналов срабатывания у RegExp или у RegExpValidator я не нашел. Сигнал textChanged у лайнэдита, соотвественно, не срабатывает, раз символ не появился.
Пробовал через keyPressEvent:
void MainWindow::keyPressEvent(QKeyEvent *event)
{
if (ui->lineEdit->hasFocus())
qDebug() << event->key();
}
Но, почему-то, тоже не сработало. Клавиши типа alt, shift, caps lock определяются, а те, которые должны появиться в поле ввода - нет. (но их бы все равно пришлось прогонять через тот же RegExp для получения результата.
В итоге, смог добиться результата только с помощью голого QRegExp:
QRegExp re("[^(A-Za-z)]");
qDebug() << re.exactMatch(ui->lineEdit->text().at(ui->lineEdit->cursorPosition()-1));
Но мне кажется, это слишком сложно и должен быть более простой и логичный способ, чем проверять добавление посимвольно.