Qt实现全局观察者模式(多层窗体之间直接传递消息)-支持传参

本文介绍了如何在Qt中实现全局观察者模式,用于多层窗体之间的直接消息传递,并支持传递参数。通过`globalObserver.h`和`observerApater.h`两个关键类的设计,利用中间层`observerApater`绑定槽函数到信号,实现在触发时调用。同时提供了一个工厂类`observerApaterFactory`用于创建中间层对象。文章还包含了函数实现的详细步骤,以及测试代码和可下载的源码资源。
摘要由CSDN通过智能技术生成

#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
  • 9
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
QT C++中,可以使用信号和槽机制来实现观察者模式的异步通信。 具体实现步骤如下: 1. 定义一个观察者类,其中包含一个槽函数,用于处理被观察者发出的信号。 2. 定义一个被观察者类,其中包含一个信号,用于通知观察者。 3. 在被观察者类中,发出信号时调用 emit 关键字,并传递需要传递的参数。 4. 在观察者类中,将自己的槽函数与被观察者的信号连接起来,使用 connect 函数实现连接。 这样,当被观察者发出信号时,观察者的槽函数会被自动调用,实现了异步通信。 下面是一个简单的示例代码: ``` // 观察者类 class Observer : public QObject { Q_OBJECT public slots: void handleMessage(const QString& message) { qDebug() << "Received message: " << message; } }; // 被观察者类 class Subject : public QObject { Q_OBJECT signals: void messageReceived(const QString& message); public: void sendMessage(const QString& message) { emit messageReceived(message); } }; int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // 创建观察者和被观察者对象 Observer observer; Subject subject; // 将观察者的槽函数与被观察者的信号连接起来 QObject::connect(&subject, SIGNAL(messageReceived(QString)), &observer, SLOT(handleMessage(QString))); // 发送消息 subject.sendMessage("Hello World!"); return a.exec(); } ``` 在上面的示例代码中,当被观察者发出 messageReceived 信号时,观察者的 handleMessage 槽函数会被自动调用,并输出接收到的消息

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值