Предположим, что у меня есть MyWidget, который содержит a MySubWidget, например. пользовательский виджет, который содержит текстовое поле или что-то еще. Я хочу, чтобы другие классы могли подключаться к сигналам и слотам, которые были открыты с помощью экземпляра MySubWidget. Это обычный способ сделать это:
- Выведите указатель на экземпляр
MySubWidgetс помощью методаsubWidget()вMyWidget - Дублируйте сигналы и слоты
MySubWidgetв классеMyWidgetи напишите код пересылки - Что-то еще?
Выбор 1 выглядит как наименьший код, но он также представляет собой разрывы инкапсуляции, так как теперь другим классам известно, что содержащиеся в нем виджеты MyWidget являются и могут зависеть от их функциональности.
Выбор 2 кажется, что он хранит инкапсуляцию, но это много, казалось бы, избыточный и потенциально запутанный код, который искажает элегантность всей системы сигналов и слотов.
Что обычно делается в этой ситуации?