我如何从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找出代码出了问题的地方,没有从表单字段中检索任何值。
我只是在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));
});
我相信第一个警告来自以下事实:QString :: number没有浮点数的重载,因此“ solution”变量被提升为double。您可以显式转换它来摆脱警告:
QString::number ((double) solution, 'f', 10)
或者,您可以将“解决方案”声明为双精度值,并且始终使用双精度值。
第二条语句生成转换警告,因为“ 0.0”是双精度型,然后强制floatvalue_A提升为双精度型。这里有一个关于隐式类型0的讨论:
C++ difference between 0 and 0.0
如果您在代码中使用浮点数,则可以使用“ 0.0f”强制将常数设为浮点数而不是双精度数,这应该摆脱警告。如果您将变量始终翻倍,那么它将自动消失。