c++11 - 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;
}
}
请告知可能是什么问题。
解决方案
我认为这些插槽
on_cBoxMeasures_currentIndexChanged(const QString &arg1)
on_cBoxMeasures_currentIndexChanged(int index)
连接onIndexChange
信号。当组合值改变时,这两个插槽将同时被调用。这样您的代码将无法正常工作。我建议您删除其中一个插槽。
推荐阅读
- http-status-code-302 - 接收 302 作为成功响应而不是失败
- java - 如何对带有通配符的文件进行布尔运算,例如带有内置库的“myDirectory\subFolder\TestFile*”?
- python - 在 Keras 中,如何使用 dot() 计算张量和常数矩阵的每一行之间的余弦接近度?
- python - Flask 尝试运行 python 脚本的内部服务器错误
- mysql - Drupal 8 数据库安装未连接到 docker mysql 容器
- odoo - odoo - 如何在视图中显示上下文?
- php - wordpress - 媒体库类别 URL 结构
- android - 具有来自 firebase 的数据的多个布局 recyclerView
- reactjs - 带 React 的 Stripe Connect
- javascript - 文件切换js在角度6中不起作用