信号槽函数顺序以及是否可以有返回值问题

引言

qt的信号槽机制,不仅可以一个信号连接一个槽,而且可以一对多或多对一

  • 对一个信号对应多个槽时

  槽函数的执行顺序和信号槽连接的顺序一致

  • 多个信号对应一个槽时

  首先利用 QObject::setObjectName(const QString&) 方法设置信号发出者的对象名称,然后在槽函数中利用 QObject::sender()->objectName() 方法获取信号发出者的对象名称

 

所以官方给出申明信号槽都不要带有返回值,因为当多对多的情况下时都给你返回值,一大堆有何意义呢,但是有些特殊情况时是可以有的,较真的朋友请看下面

一、信号返回值

  大都说Qt信号槽不能使用返回值。其实不不准确的,Qt5中,信号槽是有返回值的。只是Qt的一个信号可以连接多个槽,还有同步调用和异步调用的问题,没发支持的很好,所以,返回值虽有,但没啥用。

先说下返回值的规则把:

  • 同步调用才有返回值,异步调用的返回值永远为返回值类型默认构造函数出来的。
  • 连接的多个槽都返回值,那么结果是最后调用(连接)的那个。

也就是说对于QueuedConnection连接的信号槽,永远只是返回返回类型的默认构造函数的。对于AutoConnection连接的,如果发出信号的线程和槽函数线程不同亦然。

二、槽函数返回值

  槽函数可以是任意的函数,可以是虚函数,可以被重载,和信号一样一般在直连的信号槽时有用,其余时候真的没啥意义

原文地址:https://www.cnblogs.com/laiyingpeng/p/12509345.html