QLineEdit 和 QComboBox 有不相关的行为

QLineEdit and QComboBox have unrelated behavior

我有一个包含很多控件的用户界面。但是,我遇到了一个 QLineEdit 和 QComboBox 没有正确响应的问题。 我基本上是从像素测量值转换为 millimeters/centimeters/decimeters 并使用 QComboBox 进行测量,并在 QLineEdit 上显示结果。 对于转换 table,我使用了 this page。 当我选择 fromPixelToMillimeters() 时它会进行转换,但是当我选择 fromPixelToCentimeters() 时我认为它使用的是 fromPixelToMillimeters() 第一次转换后的现值。如果我返回选择 fromPixelToMillimeters(),我也会得到不同的结果。这种情况不断发生,我每次都会得到不同的衡量标准。

查看下面的代码:

void MainWindow::on_cBoxMeasures_currentIndexChanged(const QString &arg1)
{
    if(arg1 == "Select Conversion(s)") {
        return ui->leftLineEditDist->setText(QString("%1").arg(ui->leftLineEditDist->text().toDouble()));
    } else if(arg1 == "pixel") {
        return ui->leftLineEditDist->setText(QString("%1").arg(ui->leftLineEditDist->text().toDouble()));
    } else if(arg1 == "mm") {
        return fromPixelToMillimeters();
    } else if(arg1 == "dm") {
        return fromPixelToDecimeters();
    } else if(arg1 == "cm") {
        return fromPixelToCentimeters();
    } else if(arg1 == "m") {
        return fromPixelToMeters();
    }
}

void MainWindow::fromPixelToMillimeters()
{
    double mm = ui->leftLineEditDist->text().toDouble();
    double dpi = 300;
    double totalDistanceInMillimeter = (mm*25.4)/dpi;
    ui->leftLineEditDist->setText(QString("%1").arg(totalDistanceInMillimeter));
    ui->leftLineEditDist->show();
}

void MainWindow::fromPixelToCentimeters()
{
    double mm = ui->leftLineEditDist->text().toDouble();
    double dpi = 300;
    double totalDistanceInCm = ((mm*25.4)/dpi)*0.1;
    ui->leftLineEditDist->setText(QString("%1").arg(totalDistanceInCm));
    ui->leftLineEditDist->show();
}

void MainWindow::fromPixelToDecimeters()
{
    double mm = ui->leftLineEditDist->text().toDouble();
    double dpi = 300;
    double totalDistanceInDcm = ((mm*25.4)/dpi)*0.01;
    ui->leftLineEditDist->setText(QString("%1").arg(totalDistanceInDcm));
    ui->leftLineEditDist->show();
}

void MainWindow::fromPixelToMeters()
{
    double mm = ui->leftLineEditDist->text().toDouble();
    double dpi = 300;
    double totalDistanceInM = ((mm*25.4)/dpi)*0.001;
    ui->leftLineEditDist->setText(QString("%1").arg(totalDistanceInM));
    ui->leftLineEditDist->show();
}

void MainWindow::on_cBoxMeasures_currentIndexChanged(int index)
{
    switch (index) {
    case(0):
        break;
    case(1):
        break;
    case(2):
        fromPixelToMillimeters();
        break;
    case(3):
        fromPixelToCentimeters();
        break;
    case(4):
        fromPixelToDecimeters();
        break;
    case(5):
        fromPixelToMeters();
        break;
    }
}

请告知可能是什么问题。

我认为这些插槽

on_cBoxMeasures_currentIndexChanged(const QString &arg1)
on_cBoxMeasures_currentIndexChanged(int index)

连接了onIndexChange信号。 当组合值改变时,这两个插槽将被同时调用。 这样您的代码就无法正常工作。 我建议您删除其中一个插槽。