1

我有一个有人写的代码

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

我该怎么做?

4

2 回答 2

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 并返回 pos 中的相应位置。

如果您的 BLZ 仅限于德国,您可以轻松添加验证功能,它仅在有八位数字时返回 QValidator::Acceptable,否则返回 QValidator::Intermediate。

无论如何,编写一个自己的 QValidator,通常非常简单直接,在大多数情况下是最好的(也是最面向未来的)解决方案。正则表达式很棒,但 C++ 显然是这里更强大的语言,它还产生了一个更具可读性的验证器;)。

于 2012-05-08T01:33:06.323 回答
0

您可以尝试使用:

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

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

于 2012-09-05T02:52:23.077 回答