c++实现Qt信号槽机制

  • 信号槽机制的原理
    信号槽是观察者模式的一种实现,或者说是一种升华:
  • 一个信号就是一个能够被观察的事件,或者至少是事件已经发生的一种通知;
  • 一个槽就是一个观察者,通常就是在被观察的对象发生改变的时候——也可以说是信号发出的时候——被调用的函数;
  • 你可以将信号和槽连接起来,形成一种观察者-被观察者的关系;
  • 当事件或者状态发生改变的时候,信号就会被发出;同时,信号发出者有义务调用所有注册的对这个事件(信号)感兴趣的函数(槽);
  • 信号和槽是多对多的关系,一个信号可以连接多个槽,而一个槽也可以监听多个信号;

信号槽机制是Qt的一大特性,Qt信号与槽机制降低了Qt对象的耦合度。但这种做法效率低,不灵活。

  1. 使用c++实现简单的信号槽机制
    (1)信号模板类实现:
// CSignal.hpp
#ifndef _CSIGNAL_H
#define _CSIGNAL_H

#include <vector>
#include <memory>
#include <functional>
#include "CSlot.hpp"

#define emit
#define slots
#define signals public
#define connect(sender, signal, slot) ((sender)->signal.bind(slot))

template<typename... Args>
class Signal
{
   
public:
    using SlotPtr = std::shared_ptr<Slot<Args&&...>>; 
    using OnFunc = std::function<void(Args&&...)>;

    void bind(const OnFunc& func)
    {
   
        m_slotVec.push_back(
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值