2012-05-07 3 views
1

У меня есть код кто-то написало и тамудаления из пробельных символов QRegExpValidator

this->llBankCode = new widgetLineEditWithLabel(tr("Bankleitzahl"), "", Qt::AlignTop, this); 
QRegExpValidator *validatorBLZ = new QRegExpValidator(this); 
validatorBLZ->setRegExp(QRegExp("[0-9]*", Qt::CaseSensitive)); 
this->llBankCode->lineEdit->setValidator(validatorBLZ); 

, как это видно из этого кода, является то, что validatorBLZ может принимать только цифры от 0 до 9. Я хотел бы изменить его , что validatorBLZ также сможет получить как входное пробел (но не для начала с пробелом), но он не будет показан.

Пример: Если я попытаюсь скопировать &, вставьте строку формата '22 34 44 ', результатом будет пустое поле. Мне бы хотелось, чтобы строка «22 34 44» была показана в поле «223444».

Как я мог это сделать?

ответ

0

Вы можете попробовать использовать:

QString string = "22 34 44"; 
string.replace(QString(" "), QString("")); 

Это заменит все пробелы с не-пространства.

0

Создайте свой собственный подкласс QValidator и подтвердите подтверждение и исправление. Fixup делает то, что вы просите: изменяет ввод таким образом, что делает его промежуточным/приемлемым. В вашем случае, рассмотрит следующий код-фрагмент для:

адресной привязки
fixup (QString &input) const 
{ 
    QString fixed; 
    fixed.reserve(input.size()); 
    for (int i=0; i<input.size(); ++i) 
    if (input.at(i).isDigit()) fixed.append(input.at(i)); 
    input = fixed; 
} 

(это не тестировалось)

Функция Validate, очевидно, выглядит одинаково, возвращаясь QValidator :: Invalid, когда он сталкивается с не- значный символ и возвращение соответствующего положения в поз.

Если ваш BLZ ограничен Германией, вы можете легко добавить функцию проверки, что она возвращает QValidator :: Допустимо, когда имеется восемь цифр, и QValidator :: Intermediate else.

Как бы то ни было, написать собственный QValidator, который часто бывает очень простым и прямым, является лучшим (и наиболее перспективным) решением в большинстве случаев. RegExes отличные, но C++ явно более мощный язык здесь, что, кроме того, приводит к гораздо более читаемому валидатору;).

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