資源簡介
多個窗體之間要通信真的好麻煩,比如: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++;
????}
}
評論
共有 條評論