QLineEdit和QComboBox具有不相关的行为

时间:2018-11-25 21:38:34

标签: c++11 qt5 qt4

我有一个带有很多控件的用户界面。但是,我对QLineEdit和QComboBox的响应不正确。 我基本上是使用QComboBox将像素尺寸转换为毫米/厘米/分米和米,并在QLineEdit上显示结果。 对于转换表,我使用了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;
    }
}

请告知可能是什么问题。

1 个答案:

答案 0 :(得分:1)

我认为这些插槽

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

连接到onIndexChange信号。 更改组合值时,将同时调用这两个插槽。 这样您的代码将无法正常工作。 我建议您删除这些插槽之一。