【问题标题】:QT: How to retrieve floating point value from QLineEdit form fieldsQT:如何从 QLineEdit 表单字段中检索浮点值
【发布时间】:2019-10-27 14:05:06
【问题描述】:

我如何从 QLineEdit 字段中获取/转换文本。 下面的代码由按钮/插槽操作。

但是当编译并按下按钮时,会显示 0.00000000000。 无论我在字段中输入什么数字,都不会进行计算。

float solution = 0.0;

QString value_A = ui->doubleSpinBox_1->text();
float floatvalue_A = value_A.toFloat();
QString value_B = ui->lineEdit_1->text();
float floatvalue_B = value_B .toFloat();

if(floatvalue_A == 0.0){
    QMessageBox::information(this, "empty","",QMessageBox::Ok);
}

solution = (floatvalue_A * floatvalue_B);
ui->lineEdit_result_1->setText(QString::number(solution, 'f', 10));

代码编辑器提示:

ui->lineEdit_result_1->setText(QString::number(solution, 'f', 10)); warning: implicit conversion increases floating-point precision: 'float' to 'double'

这里还有:

if(floatvalue_A == 0.0){ warning: implicit conversion increases floating-point precision: 'float' to 'double'
    QMessageBox::information(this, "empty","",QMessageBox::Ok);
}

我做错了什么? 我使用 QMessageBox 找出代码出错的地方,没有从表单字段中检索到值。

【问题讨论】:

    标签: qt math floating-point qt5 qlineedit


    【解决方案1】:

    我只是在 MainWindow 中运行此代码,它按预期工作

      connect(ui->pushButton, &QPushButton::clicked, this, [&]() {
            auto f1 = ui->lineEdit->text().toFloat();
            auto f2 = ui->lineEdit_2->text().toFloat();
            auto f3 = ui->doubleSpinBox->value();
            auto sum = f1 + f2 + f3;
            ui->lineEdit_3->setText(QString::number(sum));
      });
    

    【讨论】:

    • 经过另一次测试,我可以检索到 QlineEdit 的值,但 QDoubleSpinBox 没有接缝。
    • @NaturalDemon ui->doubleSpinBox->value(); ??
    【解决方案2】:

    我相信第一个警告来自这样一个事实,即 QString::number 没有浮点重载,因此“解决方案”变量被提升为双精度。您可以显式转换它以消除警告:

    QString::number ((double) solution, 'f', 10)
    

    或者,您可以将“解决方案”声明为双精度,并在整个过程中简单地使用双精度值。

    第二个语句生成一个转换警告,因为“0.0”是一个双精度,然后强制 floatvalue_A 提升为双精度。这里有一个关于 0 的隐含类型的讨论:

    C++ difference between 0 and 0.0

    如果您在代码中保留浮点数,您可以使用“0.0f”来强制常量为浮点数而不是双精度数,这样就可以消除警告。如果您始终将变量切换为 double,那么它会自动消失。

    【讨论】:

      【解决方案3】:

      您将 double 与 float 进行比较,这会导致精度丢失,这就是原因。

      0.0 是一个文字双精度,直到你明确告诉 qt 你想要一个浮点数

      喜欢做

      auto myFloat{0.0f};
      

      旁注:你不应该做这样的比较:

       floatvalue_A == 0.0
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-02
        • 2019-08-01
        相关资源
        最近更新 更多