qt - 使用 Qstring::toDouble 来检查数据

标签 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 如果其为 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/

相关文章:

java - 如何在java中的case语句中输入Double值

c++ - 函数 sqlite3_open_v2 文件路径

java - 如果未对金额应用任何操作,BigDecimal.doubleValue() 的准确性如何

Docker 用于基于 GUI 的环境?

matlab - 如何在 MATLAB 中创建一个 GUI 来播放、暂停、快进和快退视频?

为 vim 创建一个前端

ajax 启动时 Jquery 阻止 UI

Java:使用 DecimalFormat 格式化 double 和整数,但保留没有小数点分隔符的整数

qt - 如何防止 QWebEngineView 将注意力集中在 setHtml(...) 和 load(...) 调用上?

c++ - gstreamermm和Qt编译错误