资源简介

多个窗体之间要通信真的好麻烦,比如:A调出B,B调出C,那么C给A发消息,那就得经过B周转才能实现。对于两三层窗体,这种方法还可以接受,但嵌套太多就有点烦人了。

资源截图

代码片段和文件信息

#include “globalObserver.h“

globalObserver *globalObserver::m_pInst = NULL;
globalObserver *globalObserver::getGlobalObserver()
{
    if (m_pInst == NULL)
    {
        m_pInst = new globalObserver();
    }
    return m_pInst;
}

void globalObserver::release()
{
    if (m_pInst != NULL)
    {
        delete m_pInst;
        m_pInst = NULL;
    }
}

void globalObserver::attach(const QString type Qobject *reciver const char *method)
{
    obesrverApater *oA = obesrverApaterFactory::getInst()->createObesrverApater();
    connect(oA SIGNAL(notify()) reciver method);
    relationData *data = new relationData();
    data->type = type;
    data->reciver = reciver;
    data->obesrverApater = oA;
    m_oRelationList.append(data);
}

void globalObserver::detach(const QString type const Qobject *reciver)
{
    QList::iterator iter = m_oRelationList.begin();

    while (iter != m_oRelationList.end())
    {
        if ((*iter)->type.compare(type) == 0 && (*iter)->reciver == reciver)
        {
            relationData *data = *iter;
            m_oRelationList.removeOne((*iter));

            delete data->obesrverApater;
            delete data;
            return;
        }
        iter++;
    }
}

void globalObserver::notify(const QString type)
{
    QList::iterator iter = m_oRelationList.begin();
    while (iter != m_oRelationList.end())
    {
        if ((*iter)->type.compare(type) == 0)
        {
            emit (*iter)->obesrverApater->notify();
        }
        iter++;
    }
}

globalObserver::globalObserver(Qobject *parent) : Qobject(parent)
{

}

globalObserver::~globalObserver()
{
    //释放列表数据
    QList::iterator iter = m_oRelationList.begin();

    while (iter != m_oRelationList.end())
    {
        delete (*iter)->obesrverApater;
        delete *iter;
        iter++;
    }

}

评论

共有 条评论