Если вы посмотрите на собственный код Qt, они предпочитают вариант 2.
Например, посмотрите на QTabWidget и QTabBar . Они разделяют несколько сигналов и слотов, но QTabWidget скрывает тот факт, что он использует QTabBar (ну, конечно ... sorta ... QTabWidget::tabBar()
явно нарушает это, даже если он защищен).
Хотя это приведет к увеличению количества кода, я думаю, оно того стоит для инкапсуляции.
Не забывайте, что вы можете подключать сигналы к сигналам следующим образом:
connect(mySubWidget, SIGNAL(internalSignal(int)), this, SIGNAL(externalSignal(int)));
Что заставит MyWidget
испустить externalSignal(int)
, когда MySubWidget
испустит internalSignal(int)
. Это помогает с сигнальной стороны вещей по крайней мере. К сожалению, я не знаю простого способа сделать то же самое для слотов.