2012-01-04 10 views
3

QString::toDouble()関数を使用してユーザー入力を検証しようとしています。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を使用しようとしていた:documentationは、関数は次のように使用すべきであると言います。問題は、単語が入力されてもメッセージが常に有効であることです。ここに私のコードは、これまでのところです:

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()関数は文字を値に変換しています。

誰かが間違っていた場所を説明できますか?それと

+0

ユーザーが「NaN」または「Inf」と入力し、その倍数が小数点以下にならない場合、「ok」がtrueになります。おそらく、数値が有限であることを保証する第2の検証レイヤーが必要になるでしょう。 – cgmb

答えて

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

、あなたは体系的falsevalidateを設定し、その割り当ての結果テストしている - あまりにfalseです。

これは間違っています。次のものが必要です。

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

または::ブールテストの比較を省略することも、より一般的である

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

if (!valid) { // do stuff if not valid ... 
あなたの変数は、より良い validという名前になり

、またはconversionOkまたはそのようなものです。これはアクションではなく、何か検証が必要かどうかを示すものではなく、アクション/検証の結果です。

+3

OH男!問題を深く見て話す。まあ。私は何を言うことができる、noobsはnoobsになります。助けてくれてありがとう –