Я пытаюсь проверить ввод пользователя с помощью функции 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
бросить сообщение об ошибке, если его ложь с целью только что позволяет пользователям вводить действительные целые числа и десятичные. Проблема заключается в том, что сообщение всегда возвращает значение даже при вводе слов. Вот мой код до сих пор:
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()
преобразует буквы в значения.
Может ли кто-нибудь объяснить, где я ошибся?
Обратите внимание, что «ok» будет истинным, если пользователь вводит «NaN» или «Inf», а double не будет десятичным. Вероятно, вы захотите сделать второй уровень проверки, который гарантирует, что число конечно. – cgmb