引言
qt的信號槽機制,不僅可以一個信號連接一個槽,而且可以一對多或多對一
-
對一個信號對應多個槽時
槽函數的執行順序和信號槽連接的順序一致
-
多個信號對應一個槽時
首先利用 QObject::setObjectName(const QString&) 方法設置信號發出者的對象名稱,然后在槽函數中利用 QObject::sender()->objectName() 方法獲取信號發出者的對象名稱
所以官方給出申明信號槽都不要帶有返回值,因為當多對多的情況下時都給你返回值,一大堆有何意義呢,但是有些特殊情況時是可以有的,較真的朋友請看下面
一、信號返回值
大都說Qt信號槽不能使用返回值。其實不不准確的,Qt5中,信號槽是有返回值的。只是Qt的一個信號可以連接多個槽,還有同步調用和異步調用的問題,沒發支持的很好,所以,返回值雖有,但沒啥用。
先說下返回值的規則把:
- 同步調用才有返回值,異步調用的返回值永遠為返回值類型默認構造函數出來的。
- 連接的多個槽都返回值,那么結果是最后調用(連接)的那個。
也就是說對於QueuedConnection連接的信號槽,永遠只是返回返回類型的默認構造函數的。對於AutoConnection連接的,如果發出信號的線程和槽函數線程不同亦然。
二、槽函數返回值
槽函數可以是任意的函數,可以是虛函數,可以被重載,和信號一樣一般在直連的信號槽時有用,其余時候真的沒啥意義