我有一个带有两个旋转框的表单,由于宽度和高度的纵横比,它们必须连接起来。当我单击第一个旋转框并增加/减少值时,另一个,第二个旋转框应该将其值更改为与第一个旋转框成比例。我已经完成了比率连接,但是有问题,因为我在 SLOT valueChanged(int) 上连接了两个旋转框,并且这个方法阻塞了整个程序,因为无限循环。这意味着当我将值增加到第一个 spinbox 时,首先为这个旋转框更改值,然后为再次调用第一个旋转框的第二个更改值。
我想解决这个问题,所以当我单击一个旋转框时,以正确的方式更改这两个值而不会出现无限循环。
于是就有了代码:
void MainWindow::on_sbHeight_valueChanged(int arg1)
{
if (arg1 != 0) {
if (ui->radioRatio1->isChecked()) {
ui->sbWidth->setValue((arg1/8)*2);
} else if (ui->radioRatio2->isChecked()) {
ui->sbWidth->setValue((arg1/14)*3);
}
} else {
ui->sbWidth->setValue(arg1);
}
}
void MainWindow::on_sbWidth_valueChanged(int arg1)
{
if (arg1 != 0) {
if (ui->radioRatio1->isChecked()) {
ui->sbHeight->setValue((arg1/2)*8);
} else if (ui->radioRatio2->isChecked()) {
ui->sbHeight->setValue((arg1/3)*14);
}
} else {
ui->sbHeight->setValue(arg1);
}
}