引言
qt的信号槽机制,不仅可以一个信号连接一个槽,而且可以一对多或多对一
-
对一个信号对应多个槽时
槽函数的执行顺序和信号槽连接的顺序一致
-
多个信号对应一个槽时
首先利用 QObject::setObjectName(const QString&) 方法设置信号发出者的对象名称,然后在槽函数中利用 QObject::sender()->objectName() 方法获取信号发出者的对象名称
所以官方给出申明信号槽都不要带有返回值,因为当多对多的情况下时都给你返回值,一大堆有何意义呢,但是有些特殊情况时是可以有的,较真的朋友请看下面
一、信号返回值
大都说Qt信号槽不能使用返回值。其实不不准确的,Qt5中,信号槽是有返回值的。只是Qt的一个信号可以连接多个槽,还有同步调用和异步调用的问题,没发支持的很好,所以,返回值虽有,但没啥用。
先说下返回值的规则把:
- 同步调用才有返回值,异步调用的返回值永远为返回值类型默认构造函数出来的。
- 连接的多个槽都返回值,那么结果是最后调用(连接)的那个。
也就是说对于QueuedConnection连接的信号槽,永远只是返回返回类型的默认构造函数的。对于AutoConnection连接的,如果发出信号的线程和槽函数线程不同亦然。
二、槽函数返回值
槽函数可以是任意的函数,可以是虚函数,可以被重载,和信号一样一般在直连的信号槽时有用,其余时候真的没啥意义