QLineEdit и QComboBox имеют несвязанное поведение - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть пользовательский интерфейс с большим количеством элементов управления.Однако у меня есть проблема с 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;
    }
}

Пожалуйста, сообщите, в чем проблема.

1 Ответ

0 голосов
/ 26 ноября 2018

Я думаю, что эти слоты

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

связаны с сигналом onIndexChange.Когда значение комбо будет изменено, эти два слота будут вызываться одновременно.Так что ваш код не будет работать хорошо.Я рекомендую вам удалить один из этих слотов.

...