首页 > 解决方案 > QLineEdit 和 QComboBox 有不相关的行为

问题描述

我有一个带有很多控件的用户界面。但是,我有一个 QLineEdit 和一个 QComboBox 没有正确响应的问题。我基本上是使用 QComboBox 将像素测量值转换为毫米/厘米/分米和米,并在 QLineEdit 上显示结果。对于我使用此页面的转换表。当我选择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;
    }
}

请告知可能是什么问题。

标签: c++11qt5qt4

解决方案


我认为这些插槽

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

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


推荐阅读