使用Qstring :: toDouble检查数据

Wyl*_*SG. 3 validation double user-interface qstring qt

我正在尝试使用该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.
*/
Run Code Online (Sandbox Code Playgroud)

所以我试图使用它*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();
    }
}
Run Code Online (Sandbox Code Playgroud)

我有一种感觉,我没有validate正确地通过论证,但文件不够坚实,我真的不知道; 也许该QString::toDouble()功能是将字母转换为值.

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

Mat*_*Mat 5

if (validate = false)
         //  ^ problem! this is an assignment
Run Code Online (Sandbox Code Playgroud)

就这样,你设置validatefalse系统,并测试该分配的结果-这是false太.

这是不正确的.你需要:

if (validate == true) {
        //   ^^ comparison here
  // conversion worked
} else {
  // conversion failed
}
Run Code Online (Sandbox Code Playgroud)

省略布尔测试的比较更为常见:

if (valid) { // do stuff if valid ...
Run Code Online (Sandbox Code Playgroud)

要么:

if (!valid) { // do stuff if not valid ...
Run Code Online (Sandbox Code Playgroud)

您的变量将更好地命名valid,conversionOk或类似的东西.它不是一个动作,它不表示某些东西是否需要验证,而是表明该动作/验证的结果.

  • 天啊!谈论对问题的深入研究.好; 我能说什么,新手将是新手.谢谢你的帮助 (3认同)