QT:如何从QLineEdit表单字段中检索浮点值

问题描述 投票:-1回答:2

我如何从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
2个回答
2
投票

我只是在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));
  });

0
投票

我相信第一个警告来自以下事实:QString :: number没有浮点数的重载,因此“ solution”变量被提升为double。您可以显式转换它来摆脱警告:

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

或者,您可以将“解决方案”声明为双精度值,并且始终使用双精度值。

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

C++ difference between 0 and 0.0

如果您在代码中使用浮点数,则可以使用“ 0.0f”强制将常数设为浮点数而不是双精度数,这应该摆脱警告。如果您将变量始终翻倍,那么它将自动消失。

© www.soinside.com 2019 - 2024. All rights reserved.