Иногда встречается ситуация, когда при смене значения в одном компоненте надо поменять значение в другом, и наоборот, например
C++ (Qt)
connect(spinbox1, SIGNAL(valueChanged(int)), this, SLOT(slotValueChanged1(int)));
connect(spinbox2, SIGNAL(valueChanged(int)), this, SLOT(slotValueChanged2(int)));
void MyClass::slotValueChanged1(int i)
{
     spinbox2->setValue(i);
}
void MyClass::slotValueChanged2(int i)
{
     spinbox1->setValue(i);
}
Если не предпринять дополнительных мер, то слоты будут бесконечно вызывать друг друга. 
Очевидны два метода решения
Первый - использовать метод QObject::blockSignals
C++ (Qt)
void MyClass::slotValueChanged1(int i)
{
     this->blockSignals(true);
     spinbox2->setValue(i);
     this->blockSignals(false);}
 
void MyClass::slotValueChanged2(int i)
{
     this->blockSignals(true);
     spinbox1->setValue(i);
     this->blockSignals(false);
}
Считаю, что это плохое решение, т.к. блокируется весь механизм сигнал/слот, а не только те сигналы которые надо.
Другой вариант - ввести переменную, определяющую находимся ли мы уже внутри слота. Он не имеет недостатков первого метода, но имеет свои недостатки: много кода, на каждую пару слотов надо вводить отдельную переменную.
C++ (Qt)
bool in_slot=false;
void MyClass::slotValueChanged1(int i)
{
     if(!in_slot)
     {
         in_slot=true;
         spinbox2->setValue(i);
         in_slot=false;
     }
}
void MyClass::slotValueChanged2(int i)
{
     if(!in_slot)
     {
         in_slot=true;
         spinbox1->setValue(i);
         in_slot=false;
     }
}
Есть ли какое-то стандартное решение для такой ситуации, не имеющее недостатков указанных решений?