我有这么一个窗口,红色是底层窗口w1,蓝色是中间窗口w2,绿色的是顶层窗口w3
我现在想把信号从w3传到w1,或者从w1传到w3
传统方式
使用信号槽传递,把信号从w1,传到w2,w2中转传到w3,中间通过多次定义信号,转发信号
缺点:逻辑混乱,耦合度高,可读性差
单例类
这种方式更加优雅代码如下
#ifndef GLOBAL_H
#define GLOBAL_H
#include <QObject>
//全局信号转发单例类
class GlobalObj : public QObject
{
Q_OBJECT
public:
//获取单实例
static GlobalObj* getInstance();
//释放单实例
static void deleteInstance();
signals:
void sig_xixi();
void sig_buxixi();
private:
//构造、析构、拷贝构造、赋值构造私有
GlobalObj(){}
~GlobalObj(){}
GlobalObj(const GlobalObj &){}
const GlobalObj &operator=(const GlobalObj &){}
private:
//单实例对象指针
static GlobalObj *obj;
};
//全局参数类
class GlobalData
{
public:
static QString version;
};
#endif
#include "global.h"
//全局信号转发单例类
GlobalObj* GlobalObj::obj = new GlobalObj();
GlobalObj *GlobalObj::getInstance()
{
return obj;
}
void GlobalObj::deleteInstance()
{
if(obj)
{
delete obj;
obj = nullptr;
}
}
//全局参数类
QString GlobalData::version = "1.0";
具体调用方式
w1可以把信号传递给单例类,目的窗口接受单例类的信号