Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 从QRegExpValidator中删除空白_Qt_Qt4 - Fatal编程技术网

Qt 从QRegExpValidator中删除空白

Qt 从QRegExpValidator中删除空白,qt,qt4,Qt,Qt4,我有一个有人写的代码 this->llBankCode = new widgetLineEditWithLabel(tr("Bankleitzahl"), "", Qt::AlignTop, this); QRegExpValidator *validatorBLZ = new QRegExpValidator(this); validatorBLZ->setRegExp(QRegExp( "[0-9]*", Qt::CaseSensitive)); this->llB

我有一个有人写的代码

 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”


我该怎么做呢?

编写自己的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 else

无论如何,编写一个自己的QValidator,这通常是非常简单和直接的,在大多数情况下是最好和最经得起未来考验的解决方案。正则表达式是很好的,但是C++显然是这里更强大的语言,这也导致了一个更可读的验证器;p> 您可以尝试使用:

QString string = "22 34 44";
string.replace(QString(" "), QString(""));
将用非空格替换任何空格