DSP

Qt全局信号通信

2019-07-13 20:45发布

应用场景分析

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(…)); 这样就实现了进程中任何对象间信号传递。