Сигналы/слоты тоже не содержат ничего магического. Там указатели на объекты и их функции. Просто в рамках Qt это автоматизировано с помощью дополнительных ключевых слов и генерации кода - специализированного препроцессора.
В чистом С/С++ весь этот код нужно писать руками. Правда есть некоторое количество библиотек сокращающих писанину.
В Qt можно придерживаться простого правила:
Дочерний виджет не знает интерфейса родителя, а родительский знает интерфейс дочернего.
Это приводит к тому, что дочерний посылает сигналы, когда ему есть, что сказать, а родительский вызывает функции дочерних, когда ему это зачем-то нужно.
Т. е. родительский выступает для своих дочерних менеджером, о котором писал
kambala.
Иногда, можно в родительском просто связать сигнал/слоты дочерних, иногда требуется какая-то более сложная обработка.