Пример 1:
Есть два спинбокса в разных местах приложения. Они должны быть синхронизированы, т.е. — например, пользователь установил руками спин1 в значение «8», тогда спин2 должен программно тут же установить такое же значение. То же самое и от обратного, если пользак ставил руками значение в спин2.
Пример 2:
Спинбоксы, работают в режиме «range», где значение спин1 не может превышать значения спин2, а значение спин2 не может быть меньше спин1.
Я сделал для примера 1 и с небольшим заделом для примера 2, но мне кажется сделал криво — навесил свои кастомные сигнал и слот, где сигнал передает (и слот принимает) три параметра: значение, уникальное имя отправителя (кто делал эмит) и булевый флаг «вернуть отправителю». Так же, я перехватываю внутри своего класса, наследника спинбокса, оригинальное valueChanged событие, чтобы отличить, программно ли было установлено значение или это были ручонки пользака.
Для примера 2 есть только размышления — принцип как у первого, но валидатор будет где-то в отдельном месте, и именно валидатор будет подписан своим слотом на сигналы всех спинбоксов-отправителей. Если валидатору не понравится присланное значение, то он ставит третий аргумент в значение истина, может заменить значение на валидное и в любом случае рассылает сигнал всем слушающим слотам, а слоты, смотрят, для них это или нет, по булевому «вернуть отправителю» и уникальному имени отправителя (не валидатора, а самого первого, которого мацал пользак).
Так вот вопрос — а насколько я правильно сделал и как бы сделали это вы?
Если понадобится код, покажу. Но там обычная хрень, я все описал словами.