SO上的受人尊敬的答案与实际的Qt文档之间存在差异。
我已经阅读了这个问题,我想要进一步澄清。任何人都可以确认:
- 信号总是
protected
,因此它只能由类或其任何子类发出。我不确定这是不是真的;上面的问题显示了支持这一说法的答案。但是Qt 文档说: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
public、private、protected 这些词在使用关键字时没有用处- 发出的信号始终可供所有其他类使用,也就是说,任何其他类都可以始终连接到该信号(无论其是否允许发出信号)。
- 尽管所有类都可以查看所有信号,但您仍然可以有两个具有相同名称的信号的类,因为该
connect
函数将类名作为信号前缀(即SomeClass::itsSignal
)