#Qt实现全局观察者模式(多层窗体之间直接传递消息)
近来做项目发现,多个窗体之间要通信真的好麻烦,比如:A调出B,B调出C,那么C给A发消息,那就得经过B转发才能实现。对于两三层窗体,这种方法还可以接受,但嵌套太多就有点烦人了。
基于这个原因,那么要实现的东西就很清楚了,有一个全局类,去直接绑定信号槽关系,在需要触发的时候,通过这个全局类的函数,去相应的触发一下,就可以实现直连通信了。
globalObserver.h
#ifndef GLOBALOBSERVER_H
#define GLOBALOBSERVER_H
#include <QObject>
#include "obesrverApater.h"
struct relationData
{
QString type;
QObject *reciver;
obesrverApater *obesrverApater;
};
class globalObserver : public QObject
{
Q_OBJECT
public:
//因为是全局只有一个,所以直接单例模式
static globalObserver* getGlobalObserver();
static void release();
static globalObserver *m_pInst;
//绑定
void attach(const QString type, QObject *reciver, const char *method);
//解绑
void detach(const QString type, const QObject* reciver);
//触发
void notify(const QString type);
pri