4

関数を使用してユーザー入力を検証しようとしていQString::toDouble()ます。ドキュメントには、関数は次のように使用する必要があると記載されています。

double QString::toDouble ( bool * ok = 0 ) const;
/* 
   Returns the string converted to a double value.
   Returns 0.0 if the conversion fails.
   If a conversion error occurs, *ok is set to false; otherwise *ok is set to true.
*/

*okそのため、ユーザーが有効な整数または小数のみを入力できるようにする目的で、 false の場合にエラーメッセージをスローするために を使用しようとしていました。問題は、単語が入力されてもメッセージが常に有効であることです。これまでの私のコードは次のとおりです。

void MainWindow::checkData()
{        
    bool validate;
    QString tempStr;
    tempStr = ui->lineEditValidate->text();
    double converted = tempStr.toDouble(&validate);
    if (validate = false)
    {
        QErrorMessage validateError;
        validateError.showMessage("Input is Invalid");
        validateError.exec();
    }
    else
    {
        QErrorMessage worksFine;
        worksFine.showMessage("valid");
        worksFine.exec();
    }
}

私は引数を適切に渡していないと感じていvalidateますが、ドキュメントは私が本当に知るには十分ではありません。おそらく、QString::toDouble()関数は文字を値に変換しています。

誰かが私が間違っている場所を説明できますか?

4

1 に答える 1

6
if (validate = false)
         //  ^ problem! this is an assignment

これで、体系的に設定validatefalse、その割り当ての結果をテストします-これfalseもそうです。

これは正しくありません。必要なもの:

if (validate == true) {
        //   ^^ comparison here
  // conversion worked
} else {
  // conversion failed
}

ブール値テストの比較を省略することは、さらに一般的です。

if (valid) { // do stuff if valid ...

または:

if (!valid) { // do stuff if not valid ...

valid変数の名前は、またはそのようなものにする方がよいでしょうconversionOk。これはアクションではなく、検証が必要かどうかを示すものではなく、そのアクション/検証の結果です。

于 2012-01-04T16:27:16.867 に答える