我有一个人写的代码
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 :(得分: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(""));
这将用非空格替换任何空格。