我正在尝试使用QString::toDouble()
函数验证用户输入。 documentation表示该函数应该像这样使用:
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()
函数将字母转换为值。
有人可以解释我出错的地方吗?
答案 0 :(得分:5)
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
或类似的东西。它不是一个动作,它并不表示某些东西是否需要验证,而是该动作/验证的结果。