从QRegExpValidator中删除空格

时间:2012-05-07 23:20:53

标签: qt qt4

我有一个人写的代码

 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'。

我怎么能这样做?

2 个答案:

答案 0 :(得分:0)

编写您自己的QValidator子类并重新实现验证 fixup。 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;
}

(未经测试)

验证函数显然看起来很相似,当遇到非数字字符并返回pos中的相应位置时返回QValidator :: Invalid。

如果您的BLZ仅限于德国,您可以轻松添加验证功能,即只有八位数时才会返回QValidator :: Acceptable,而QValidator :: Intermediate else。

无论如何,编写自己的QValidator(通常非常简单直接)是大多数时候最好的(也是最适合未来的)解决方案。 RegExes很棒,但C ++显然是这里更强大的语言,另外还有一个更易读的验证器;)。

答案 1 :(得分:0)

您可以尝试使用:

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

这将用非空格替换任何空格。