信号和槽用于两个对象之间的通信,是Qt的核心特征和突出特征。
当一个特殊的事件发生时,相关对象便会发出一个信号,比如单击鼠标、按键等。
槽就是一个函数,用来响应信号,可以自定义或者使用已存在的函数。
信号和槽的对应关系:一个信号何以关联到多个槽,一个槽也可以关联多个信号,甚至一个信号也可以关联到另一个信号上面。如果有一个信号关联到了多个槽,当信号发出时,这些槽会一个接一个地执行,但是执行的顺序是不确定的。
关联信号和槽:使用connect函数关联信号和槽。connect函数是QObject类的成员,原型如下:
QMetaObject::Connection QObject::connect(const QObject * sender, const char * signal, const QObject * receiver, const char * method, Qt::ConnectionType type = Qt::AutoConnection)
connect函数使用举例:connect(sndobj,SIGNAL(signal(arg....)),rcvobj,SLOT(rcvfun(arg...)));
注意:一、信号和槽必须使用SIGNAL和SLOT宏,这两个宏可以将信号和槽转换成const char *类型
二、信号和槽的参数:原则上,信号和槽中的参数类型应该相对应,信号中的参数个数不能少于槽的参数个数,多出的参数将被忽略。
三、最后一个参数,一般取默认值。各参数如下图:
当一个特殊的事件发生时,相关对象便会发出一个信号,比如单击鼠标、按键等。
槽就是一个函数,用来响应信号,可以自定义或者使用已存在的函数。
信号和槽的对应关系:一个信号何以关联到多个槽,一个槽也可以关联多个信号,甚至一个信号也可以关联到另一个信号上面。如果有一个信号关联到了多个槽,当信号发出时,这些槽会一个接一个地执行,但是执行的顺序是不确定的。
关联信号和槽:使用connect函数关联信号和槽。connect函数是QObject类的成员,原型如下:
QMetaObject::Connection QObject::connect(const QObject * sender, const char * signal, const QObject * receiver, const char * method, Qt::ConnectionType type = Qt::AutoConnection)
connect函数使用举例:connect(sndobj,SIGNAL(signal(arg....)),rcvobj,SLOT(rcvfun(arg...)));
注意:一、信号和槽必须使用SIGNAL和SLOT宏,这两个宏可以将信号和槽转换成const char *类型
二、信号和槽的参数:原则上,信号和槽中的参数类型应该相对应,信号中的参数个数不能少于槽的参数个数,多出的参数将被忽略。
三、最后一个参数,一般取默认值。各参数如下图:
![](https://i-blog.csdnimg.cn/blog_migrate/cf43ec9ae2ee23dafa429bfbc394331c.png)