当前位置: 首页 > news >正文

做百科网站网站友链交换平台

做百科网站,网站友链交换平台,做网站合肥哪家公司好,友汇网网站建设管理后台最近做的一个项目,由于工程需要模块之间能够互相通信,但又不想模块之间耦合度太高 使用信号槽的话,需要两个类的对象或者指针在其中一个类都要体现,这样达不到效果, 想要一个管理类对这些互相通信的类之间进行管理,只需要在各自的类注册发送者和接收者即可,双方通过一…

最近做的一个项目,由于工程需要模块之间能够互相通信,但又不想模块之间耦合度太高

使用信号槽的话,需要两个类的对象或者指针在其中一个类都要体现,这样达不到效果,

想要一个管理类对这些互相通信的类之间进行管理,只需要在各自的类注册发送者和接收者即可,双方通过一个指定的消息ID来建立联系。

技术:QObject::connect()定义map来管理发送方和接收方

上代码

头文件

#pragma once

#include "messager_global.h"
#include "GlobalDefines.h"
#include "QObject"
#include "Platform\OSAdapter\VAZLock.h"
#include "Messager.h"

class CMsgObj
{
public:
    CMsgObj(QObject* MsgObj, const tchar* pszMsgObjName, const char* pszMethodName, Qt::ConnectionType connectyType)
    {
        m_MsgObj = MsgObj;
        m_sMsgObjName = pszMsgObjName;
        m_sMethodName = pszMethodName;
        m_connectionType = connectyType;
    };

    QObject* m_MsgObj;
    tstring m_sMsgObjName;
    string    m_sMethodName;
    Qt::ConnectionType m_connectionType;

public:
    inline bool operator == (const CMsgObj& rt) const
    {
        return (rt.m_MsgObj == m_MsgObj)
            && (rt.m_sMethodName == m_sMethodName);
    }
};

class CVAZMessager : public QObject
{
    Q_OBJECT
public:
    CVAZMessager();
    ~CVAZMessager();
    static CVAZMessager& Instance();

    void RegisterReceiver(VAZ_MSG_ID MsgID, QObject* Receiver, const tchar* pszReceiverName, const char* pszMethodName);
    void UnregisterReceiver(VAZ_MSG_ID MsgID, QObject* Receiver, const tchar* pszReceiverName, const char* pszMethodName);

    void RegisterSender(VAZ_MSG_ID MsgID, QObject* Sender, const tchar* pszSenderName, const char* pszMethodName, Qt::ConnectionType connectionType);
    void UnregisterSender(VAZ_MSG_ID MsgID, QObject* Sender, const tchar* pszSenderName, const char* pszMethodName);
    bool IsSignalRegistered(VAZ_MSG_ID MsgID, QObject* Sender);

private:
    map< VAZ_MSG_ID, list< CMsgObj> > m_mapReceivers;
    map< VAZ_MSG_ID, list< CMsgObj> > m_mapSenders;

    typedef map< VAZ_MSG_ID, list< CMsgObj> >::iterator IterReceivers, IterSenders;
    typedef list< CMsgObj>::iterator IterReceiver, IterSender;


    CVAZLock m_MessagerLock;
};


cpp文件

#include "VAZMessager.h"
#include "Platform\Logger\Logger.h"
#include "..\Common\misc.h"

CVAZMessager::CVAZMessager()
    : QObject()
    , m_MessagerLock(_T("Messager Lock"))
{
}

CVAZMessager::~CVAZMessager()
{
}

CVAZMessager & CVAZMessager::Instance()
{
    static CVAZM

http://www.dinnco.com/news/11939.html

相关文章:

  • 北京网站建设公司排名站长之家端口扫描
  • 营销型网站建设的特点阿里巴巴关键词排名优化
  • 长葛做网站网站推广的目的
  • 公安局网站备案号前缀国内搜索引擎网站
  • 整合资源加强全市网站建设麒麟seo软件
  • 舆情监控系统北京seo的排名优化
  • 大气网站设计网站seo优化是什么
  • 四川网站开发线上推广活动有哪些
  • 专门做网站推广的平台临沂百度推广多少钱
  • 免费网站系统优化大师最新版下载
  • 创建wordpress网站如何让百度收录网站
  • 西安疫情最新情况轨迹百度seo排名帝搜软件
  • 鞍山网站制作公司上海空气中检测出病毒
  • 导航网站模板免费sem优化师是什么意思
  • 公司logo设计要求有哪些中国十大seo
  • 个人网站做淘宝客会怎样网页设计案例
  • 海门城乡建设管理局网站中国进入一级战备2023
  • 如何做psd的模板下载网站seo关键词优化服务
  • 登录入口百度推广优化怎么做的
  • 重庆的企业的网站建设必应搜索
  • wordpress加超链接小果seo实战培训课程
  • 网站开发 脚本怎么写怎么制作一个简单的网页
  • WordPress电影主题MIBTseo网络推广有哪些
  • 小企业网站建设一般收费介绍网络营销的短文
  • DW如何做明星的个人网站在线推广网站的方法
  • 佛山网站设计电话上海网站快速排名优化
  • 如何在网站源码做授权百度一下官方入口
  • 微信导航网站怎么做西安网站开发
  • 设计师值得拥有的设计导航广州网站快速排名优化
  • 做网站定制关键词是指什么