【发布时间】:2013-10-08 09:03:06
【问题描述】:
在 SO 和实际 Qt 文档中尊重的答案之间存在差异。
我已阅读this question,我想进一步澄清一下。谁能确认:
- 信号总是
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? - public、private、protected 这些词在使用
signal关键字时没有用处 - 发出的信号始终可供所有其他类使用,也就是说,任何其他类都可以始终连接到该信号(无论其发出信号的权限如何)。
- 尽管所有类都可以查看所有信号,但由于
connect函数将类名作为信号前缀(即SomeClass::itsSignal),您仍然可以拥有两个具有相同名称的信号的类。
【问题讨论】:
-
即使在 Qt4 中,您也可以使用 QMetaObject::invokeMethod 从类外发出信号
标签: c++ qt inheritance signals-slots qt-signals