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;
}

(これはテストされていません)

検証関数は明らかに似ており、数字以外の文字が検出されるとQValidator :: Invalidを返し、posの対応する位置を返します。

BLZがドイツに限定されている場合は、8桁の場合にのみQValidator :: Acceptableを返し、それ以外の場合はQValidator::Intermediateを返す検証機能を簡単に追加できます。

とにかく、独自のQValidatorを作成することは、多くの場合非常に簡単で簡単ですが、ほとんどの場合、最良の(そして最も将来性のある)ソリューションです。RegExesは素晴らしいですが、C ++は明らかにここでより強力な言語であり、さらにはるかに読みやすいバリデーターになります;)。

于 2012-05-08T01:33:06.323 に答える
0

あなたは使用してみることができます:

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

これにより、スペースがスペース以外に置き換えられます。

于 2012-09-05T02:52:23.077 に答える