Использование Qstring :: toDouble Для проверки данных - PullRequest
3 голосов
/ 04 января 2012

Я пытаюсь проверить ввод пользователя с помощью функции 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 для выдачи сообщения об ошибке, если оно ложно, с целью только разрешитьпользователи вводят действительные целые или десятичные числа.Проблема в том, что сообщение всегда верным, даже если слова введены.Вот мой код:

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() преобразует буквы в значения.

Может кто-нибудь объяснить, где я ошибся?

1 Ответ

5 голосов
/ 04 января 2012
if (validate = false)
         //  ^ problem! this is an assignment

При этом вы систематически устанавливаете validate на false и тестируете результат этого назначения - который тоже равен 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 или что-то в этом роде.Это не действие, и оно не указывает на необходимость проверки чего-либо, а на результат этого действия / проверки.

...