私人/公共qt信号

问题描述:

qt信号可以公开还是私密?私人/公共qt信号

我可以创建内部信号吗,只能在课堂上看到吗?

加入: 我有一个类与一些内部信号。我怎样才能让这些信号 看不见其他类(封装&信息隐藏)

在此先感谢, 安东

Qt的信号是公众在这个意义上,任何物体可以连接到任何信号。

+0

它们也是公共的,任何其他类都可以发出它们,因为它们是公共函数。这可能已经改变了Qt的先前版本。看到这里http://stackoverflow.com/questions/19129133/qt-signals-and-slots-permissions/19130567#19130567 – johnbakers 2013-10-02 05:41:02

否信号不能是公共或私人信号。 Qt信号是受保护的类方法。

“信号” 关键字将在qobjectdefs.h定义(线69作为用于Qt的4.6.1):

# define signals protected 

UPDATE:信号仅protected高达和包括Qt 4的所有次要版本。从Qt 5.0起,他们是public。见https://stackoverflow.com/a/19130831

+2

我相信信号现在被认为是“公共”看到这里http://stackoverflow.com/questions/19129133/qt-signals-and-slots-permissions/19130567#19130567 – johnbakers 2013-10-02 05:40:15

+0

似乎可以有私人信号:http://doc.qt.io/qt-5/qstate.html#finished - 他们是如何创建的? – derM 2017-07-27 14:35:19

插槽是简单的方法,可以是公开的,保护的或私人的。

正如Andrei指出的那样,信号只是被保护的重新定义,意味着它们只能由它们所在的类所发出。

如果想使一个类从anoter一个发射的信号,则必须添加它的公共方法(或狭槽)像这样的:

void emitTheSignal(...) { 
    emit theSignal(...); 
} 
+6

我认为这不回答OP问题。他所指的信号只能由定义它们的类来监听。 – Daniel 2011-07-22 19:33:49

+0

“他们只能由他们定义的班级发出”......或者是一个朋友班级。 ;) – weberc2 2013-06-24 17:28:20

+0

我不确定这是真的。请参阅: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))的新型连接,因为它们需要信号可访问。

+0

'private:Q_SIGNAL mySignal();'还能工作吗? – leemes 2012-06-11 11:46:33

+0

没有,如“#定义Q_SIGNALS保护”,私营:不会有任何效果 – 2013-01-09 22:20:01

+0

讨厌鬼。为什么C++中的所有内容都需要黑客? – weberc2 2013-06-24 17:34:59

Qt4中的信号为protected,Qt5中的信号为public。诠释Qt5你可以通过添加QPrivateSignal作为最后一个参数使他们private。更多关于此的信息:http://woboq.com/blog/how-qt-signals-slots-work-part2-qt5.html