使用Qstring :: toDouble检查数据

时间:2012-01-04 16:22:17

标签: qt user-interface double validation qstring

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

有人可以解释我出错的地方吗?

1 个答案:

答案 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或类似的东西。它不是一个动作,它并不表示某些东西是否需要验证,而是该动作/验证的结果。