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