Мне все эти все слоты/сигналы никогда не нравились (возможно предубеждение).
Вполне возможно. Но мне очень понравились.
Но объясните, где проблема? Ведь сигнал/слот требует connect. Хочешь - связывай, не хочешь - нет. Все равно все в руках связывающего. Зачем тогда искать ограничения (на непонятно что)?
По моему автор темы хотел запретить в классе наследнике emit делать, а не связывание/развязывание.
Обратимся к Шлее:
Сигналы определяются в классе, как и обычные методы, только без реализации. С точки зрения программиста они являются только прототипами методов, содержащихся в заголовочном файле определения класса. Всю дальнейшую заботу о реализации кода для этих методов берёт на себя MOC.
Не имеет смысла определять сигналы как private, protected или public, так как они играют роль вызывающих методов.
Вывод:
В классе наследнике никак не скрыть присутствие сигнала из базового класса.