Существуют расхождения между уважаемыми ответами здесь на 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)