我正在尝试使用 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
如果其为 false,则抛出错误消息,目的是仅允许用户输入有效的整数或小数。问题是即使输入了单词,消息也始终返回有效。这是到目前为止我的代码:
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()
函数正在将字母转换为值。
有人可以解释一下我哪里出了问题吗?
最佳答案
if (validate = false)
// ^ problem! this is an assignment
这样,您就可以系统地将 validate
设置为 false
,并测试该分配的结果 - 这也是 false
。
这是不正确的。您需要:
if (validate == true) {
// ^^ comparison here
// conversion worked
} else {
// conversion failed
}
更常见的是省略 bool 测试的比较:
if (valid) { // do stuff if valid ...
或者:
if (!valid) { // do stuff if not valid ...
您的变量最好命名为valid
,或conversionOk
或类似的名称。它不是一个操作,也不指示某些内容是否需要验证,而是指示该操作/验证的结果。
关于qt - 使用 Qstring::toDouble 来检查数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8730152/