2012-01-04 2 views
3

QString::toDouble() 함수를 사용하여 사용자 입력의 유효성을 검사하려고합니다. documentation 함수는 다음과 같이 사용되어야한다 말합니다 : 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를 사용하려고했다. 문제는 단어를 입력해도 메시지가 항상 유효하다는 것입니다. 내가 제대로 validate 인수를 전달하고 있지 않다 느낌이

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

하지만 문서 나 정말 알고 충분히 고체 아니다 : 여기 내 코드는 지금까지입니다 어쩌면 QString::toDouble() 함수가 문자를 값으로 변환하는 것일 수 있습니다.

누군가 내가 잘못 갔는지 설명 할 수 있습니까? 그와

+0

사용자가 'NaN'또는 'Inf'를 입력하면 double 값이 소수가 아니므로 'ok'가 true가됩니다. 숫자가 유한 함을 보장하는 두 번째 검증 단계가 필요할 것입니다. – 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

오 남자! 문제를 너무 깊이 들여다 보면서 이야기하십시오. 잘; 내가 말할 수있는 것은 멍청한 놈이다. 도와 주셔서 감사합니다 –

관련 문제