связи сигнал слот

На самом деле связи сигнал/слот проектируются продуманно.

По нашему мнению сигнал/слот надо использовать для обратных связей. То есть об'ектом управление идёт через вызовы обычных методов, а результат отдается через сигналы всем кто будет подписан на об'ект. Но вся фишка в том, что может быть подписан один, два получателя, а может и не одного.

Здесь сделана попытка графически представить взаимосвязь классов на одном  небольшом примере.

Картинка из реального проекта, где показаны наследование классов, связи между классами.

фотка 1

бордовые стрелки - сигналы (это обратная связь)
черные стрелки - это прямые вызовы функций класса через указатель на этот класс.

kkt_QTabWgts - это QTabWidgets , набор закладок с соответствующими им виджетами оборудования (настройка связи с кассовым аппаратом).

QTabBar - закладки сверху.

В реальной программе выглядит примерно так:

фотка 2

В этой абракадабре стрелок есть логика. Смысл в том, что виджеты (они же об'екты) вложены один в другой (родитель/потомок).

Тут имеется ввиду не наследование, а так сказать композиция или агрегация.

Это когда потомок создаётся в коде родителя и указатель на потомка хранится в родителе.

Конечно потомок сигнал связывается со слотом родителя.

Так вот таких вложений может быть несколько. Но общее правило таково - нельзя при соединении сигналов и слотов  перепрыгивать через родителя (или через потомка). Точнее не то чтобы нельзя ,  но не рекомендуется.

Если надо соединить дедушку с внуком, то папа должен быть в курсе. То есть делается два соединения дедушка/папа и папа/сын.

Потому что каждый потомок должен быть самодостаточен чтобы использоваться в других проектах без изменений.

Если же вы сделаете только соединение дедушка/внук, то папу нельзя будет полноценно использовать в других проектах (у него не будет нужного функционала).