Использование QRegExValidator для QLineEdit

0

У меня есть проблема с использованием QRegExValidator для проверки QLineEdit. Предполагается, что только первое и последнее имя имеют пробел между ними. Я в значительной степени следовал примеру отсюда:

http://doc.qt.digia.com/4.6/qregexpvalidator.html

код компилируется, и я могу запустить программу, но я не могу ввести любую букву в поле lineedit. Зачем?

QString name_rx = "[A-z]+\\S[A-z]+";
QRegExp rx;
QValidator *validator =  new QRegExpValidator(rx, this); // this means mainwindow

rx.setPattern(name_rx);
ui->nameEdit->setValidator(validator);
ui->nameEdit->setMaxLength(32);

Это все, что нужно, чтобы проверить поле ввода?

Теги:
qt

2 ответа

2
Лучший ответ

Две незначительные проблемы...

QString name_rx = "([A-Z]|[a-z])+\\s([A-Z]|[a-z])+";// Note, \\s not \\S
QRegExp rx;
rx.setPattern(name_rx);// Note, happens BEFORE use in the validator

Другим приемлемым методом будет:

QString name_rx = "[a-z]+\\s[a-z]";// Note, \\s not \\S
QRegExp rx;
rx.setCaseSensitivity(Qt::CaseInsensitive);
rx.setPattern(name_rx);// Note, happens BEFORE use in the validator

И здесь он добавляется в валидатор

QValidator *validator =  new QRegExpValidator(rx, this); // this means mainwindow

ui->nameEdit->setValidator(validator);
ui->nameEdit->setMaxLength(32);

Также хороший пример того, что работает, посмотрите эту страницу:

http://doc.qt.digia.com/4.6/tools-settingseditor-variantdelegate-cpp.html

Он содержит все эти примеры специально для использования QRegEx с QRegExValidator с редактированием строк:

 boolExp.setPattern("true|false");
 boolExp.setCaseSensitivity(Qt::CaseInsensitive);

 byteArrayExp.setPattern("[\\x00-\\xff]*");
 charExp.setPattern(".");
 colorExp.setPattern("\\(([0-9]*),([0-9]*),([0-9]*),([0-9]*)\\)");
 doubleExp.setPattern("");
 pointExp.setPattern("\\((-?[0-9]*),(-?[0-9]*)\\)");
 rectExp.setPattern("\\((-?[0-9]*),(-?[0-9]*),(-?[0-9]*),(-?[0-9]*)\\)");
 signedIntegerExp.setPattern("-?[0-9]*");
 sizeExp = pointExp;
 unsignedIntegerExp.setPattern("[0-9]*");

 dateExp.setPattern("([0-9]{,4})-([0-9]{,2})-([0-9]{,2})");
 timeExp.setPattern("([0-9]{,2}):([0-9]{,2}):([0-9]{,2})");
 dateTimeExp.setPattern(dateExp.pattern() + "T" + timeExp.pattern());

Надеюсь, это поможет.

  • 0
    работал великолепно спасибо
  • 0
    [Az]+ не только соответствует буквам .
Показать ещё 2 комментария
0

ваш шаблон соответствует (например) этой строке

a\Sa

то есть должен быть буквальный\и верхний регистр S между именами. Я попытался использовать очень удобный пример regexp, вы можете найти его в стандартных примерах, выпущенных с помощью QtCreator (Ctrl + 1, затем введите regexp в поле поиска...)

Изображение 174551

Ещё вопросы

Сообщество Overcoder
Наверх
Меню