1. 程式人生 > >Qt全域性訊號通訊

Qt全域性訊號通訊

應用場景分析

Qt開發中經常會遇到作用域跨度比較大的物件間通訊的場景,如果直接使用訊號槽通過物件指標直接連線,首先需要將物件指標互相暴露出來,其中可能涉及到各種複雜的傳遞過程,導致程式混亂。一種解決方案是建立全域性的訊號中轉站,實現全域性範圍內的便捷通訊。

功能實現

設現有物件A,需要將訊號signalA()傳送給物件B。
1. 建立單例類class SIgnalStation。
2. 在單例類中定義中轉訊號void transSignalA()。
3. 在A的程式碼中,將A的訊號與訊號中轉的訊號連線:
A:: connect(this, SIGNAL(signalA()), SIgnalStation::instance(), SIGNAL(transSignalA()));
4. 在物件B中連線中轉訊號:
B::connect(SignalStation::instance(), SIGNAL(transSignalA()), this, SLOT(…));

這樣就實現了程序中任何物件間訊號傳遞。