幅と高さのアスペクト比のために接続する必要がある 2 つのスピンボックスを含むフォームがあります。最初のスピンボックスをクリックして値を増減すると、もう一方の 2 番目のスピンボックスは、最初のスピンボックスとの比率になるように値を変更する必要があります。私はすでに比率接続を行っていますが、SLOT valueChanged(int) で両方のスピンボックスを接続し、このメソッドは無限ループのためにプログラム全体をブロックするため、問題があります。これは、最初のスピンボックスの値を増やすと、最初にこのスピンボックスの値が変更され、次に最初のスピンボックスを呼び出す 2 番目のスピンボックスの値が変更されることを意味します。
この問題を解決したいので、スピンボックスの1つをクリックすると、無限ループなしで両方の値を正しい方法で変更できます。
コードは次のとおりです。
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);
}
}