Существуют расхождения между уважаемыми ответами здесь на SO и фактическими документами Qt.
Я прочитал этот вопрос, и я хочу получить дополнительные разъяснения. Кто-нибудь может подтвердить:
- Сигнал всегда
protected
, поэтому он может испускаться только классом или любым из его подклассов. Я не уверен, что это правда; в приведенном выше вопросе приведены ответы, подтверждающие это утверждение. Но Qt docs говорят:Signals are public access functions and can be emitted from anywhere, but we recommend to only emit them from the class that defines the signal and its subclasses.
Итак, что это? - Слоты - это просто функции и, следовательно, могут быть общедоступными, частными или защищенными. Очевидно, что внешний класс будет иметь возможность контролировать, если ваш класс подключает один из своих собственных сигналов к одному из своих слотов, если этот слот является общедоступным. Однако снова информация SO отличается от документов, которые говорят:
a signal emitted from an instance of an arbitrary class can cause a private slot to be invoked in an instance of an unrelated class.
Это означает, чтоprivate
не соблюдается механизмом сигнала/слота? - Слова, открытые, закрытые, защищенные, не имеют никакого отношения к работе с ключевым словом
signal
- Исходящий сигнал всегда доступен для всех других классов, то есть любой другой класс может всегда подключаться к этому сигналу (независимо от его разрешения на излучение сигнала).
- Несмотря на то, что все сигналы доступны для просмотра всеми классами, вы все равно можете иметь два класса с сигналами с одинаковым именем, поскольку функция
connect
принимает имя класса в качестве префикса сигнала (т.е.SomeClass::itsSignal
)