私人/公共qt信号
Qt的信号是公众在这个意义上,任何物体可以连接到任何信号。
否信号不能是公共或私人信号。 Qt信号是受保护的类方法。
“信号” 关键字将在qobjectdefs.h定义(线69作为用于Qt的4.6.1):
# define signals protected
UPDATE:信号仅protected
高达和包括Qt 4的所有次要版本。从Qt 5.0起,他们是public
。见https://stackoverflow.com/a/19130831。
我相信信号现在被认为是“公共”看到这里http://stackoverflow.com/questions/19129133/qt-signals-and-slots-permissions/19130567#19130567 – johnbakers 2013-10-02 05:40:15
似乎可以有私人信号:http://doc.qt.io/qt-5/qstate.html#finished - 他们是如何创建的? – derM 2017-07-27 14:35:19
插槽是简单的方法,可以是公开的,保护的或私人的。
正如Andrei指出的那样,信号只是被保护的重新定义,意味着它们只能由它们所在的类所发出。
如果想使一个类从anoter一个发射的信号,则必须添加它的公共方法(或狭槽)像这样的:
void emitTheSignal(...) {
emit theSignal(...);
}
我认为这不回答OP问题。他所指的信号只能由定义它们的类来监听。 – Daniel 2011-07-22 19:33:49
“他们只能由他们定义的班级发出”......或者是一个朋友班级。 ;) – weberc2 2013-06-24 17:28:20
我不确定这是真的。请参阅:http://stackoverflow.com/questions/19129133/qt-signals-and-slots-permissions文档可以从其他类发出信号,并且始终是公共的,不受保护。 – johnbakers 2013-10-02 02:35:10
的常用方法,例如在的kdelibs看到的,是这样的:
Q_SIGNALS:
#ifndef Q_MOC_RUN
private: // don't tell moc, doxygen or kdevelop, but those signals are in fact private
#endif
void somePrivateSignal();
这使得信号私有的,即,它只能通过射出类本身而不是由它的子类。为了不让“private:”取代Q_SIGNALS(moc不会将某些私有信号看作是信号),它在Q_MOC_RUN中,它只在moc运行时才被定义。
编辑:这种方法不适用于引入Qt 5(connect(a, &A::someSignal, b, &B::someSlot)
)的新型连接,因为它们需要信号可访问。
Qt4中的信号为protected
,Qt5中的信号为public
。诠释Qt5你可以通过添加QPrivateSignal
作为最后一个参数使他们private
。更多关于此的信息:http://woboq.com/blog/how-qt-signals-slots-work-part2-qt5.html
它们也是公共的,任何其他类都可以发出它们,因为它们是公共函数。这可能已经改变了Qt的先前版本。看到这里http://stackoverflow.com/questions/19129133/qt-signals-and-slots-permissions/19130567#19130567 – johnbakers 2013-10-02 05:41:02