4

我正在尝试使用该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()函数正在将字母转换为值。

有人可以解释我哪里出错了吗?

4

1 回答 1

6
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类似的名称。这不是一个动作,也不是表明某事是否需要验证,而是该动作/验证的结果。

于 2012-01-04T16:27:16.867 回答