信號槽函數順序以及是否可以有返回值問題


引言

qt的信號槽機制,不僅可以一個信號連接一個槽,而且可以一對多或多對一

  • 對一個信號對應多個槽時

  槽函數的執行順序和信號槽連接的順序一致

  • 多個信號對應一個槽時

  首先利用 QObject::setObjectName(const QString&) 方法設置信號發出者的對象名稱,然后在槽函數中利用 QObject::sender()->objectName() 方法獲取信號發出者的對象名稱

 

所以官方給出申明信號槽都不要帶有返回值,因為當多對多的情況下時都給你返回值,一大堆有何意義呢,但是有些特殊情況時是可以有的,較真的朋友請看下面

一、信號返回值

  大都說Qt信號槽不能使用返回值。其實不不准確的,Qt5中,信號槽是有返回值的。只是Qt的一個信號可以連接多個槽,還有同步調用和異步調用的問題,沒發支持的很好,所以,返回值雖有,但沒啥用。

先說下返回值的規則把:

  • 同步調用才有返回值,異步調用的返回值永遠為返回值類型默認構造函數出來的。
  • 連接的多個槽都返回值,那么結果是最后調用(連接)的那個。

也就是說對於QueuedConnection連接的信號槽,永遠只是返回返回類型的默認構造函數的。對於AutoConnection連接的,如果發出信號的線程和槽函數線程不同亦然。

二、槽函數返回值

  槽函數可以是任意的函數,可以是虛函數,可以被重載,和信號一樣一般在直連的信號槽時有用,其余時候真的沒啥意義


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM