2013-10-11 3 views
0

У меня возникла проблема с использованием QRegExValidator для проверки QLineEdit. Предполагается, что это только первое и последнее имя с пробелом между ними. Я довольно много следовали примеру отсюда:Использование 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); 

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

+0

becasuse когда вы пишете письмо он больше не соответствует регулярному выражению, а также пробел будет нижним регистром '\\ s' –

ответ

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

Он имеет все эти примеры специально для использования с QRegExQRegExValidator с линией редактирует:

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] + 'не только соответствует буквам] (http://stackoverflow.com/questions/29771901/почему-это-это-регулярное выражение-позволяя-а-каретка/29771926 # 29771926). –

+0

@ WiktorStribiżew Хороший звонок. Похоже, что он также получит '[\]^_' '', идущий по таблице ascii от A (65) до z (122). Я скоро поставлю заменяющее выражение. – phyatt

0

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

a\Sa 

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

enter image description here

Смежные вопросы