EventBus事件总线(观察者模式)使用

EventBus资源:https://blog.csdn.net/Mason___/article/details/157768720?spm=1001.2014.3001.5502

一、定义事件类

DBEvent.h

#include <vector>
#include "../ThridParty/EventBus/Event.hpp"
#include "../ThridParty/EventBus/EventBus.hpp"
#include "../ThridParty/EventBus/HandlerRegistration.hpp"
#include "../ThridParty/EventBus/EventHandler.hpp"

class BDShowProgramNoteEvent : public EvBus::Event
{
public:
	BDShowProgramNoteEvent(EvBus::Object& sender);
	inline void ShowProgramNote(bool bShow) { m_bShowProgramNote = bShow; }
	inline bool ShowProgramNote() { return m_bShowProgramNote; }
protected:
	bool m_bShowProgramNote;
};

class BDLoadSymbolsEvent : public EvBus::Event
{
public:
	using EvBus::Event::Event;
public:
	inline std::vector<QString> SymbolFilePath() { return m_vctSymbolFilePath; }
	inline void SymbolFilePath(const std::vector<QString>& vctPath) { m_vctSymbolFilePath = vctPath; }
private:
	std::vector<QString> m_vctSymbolFilePath;
};

DBEvent.cpp

BDShowProgramNoteEvent::BDShowProgramNoteEvent(EvBus::Object& sender)
	: EvBus::Event(sender)
{

}

二、注册与方法实现

BDSymbolWidget.h

#pragma once

#include <QWidget>
#include "ui_BDSymbolWidget.h"
#include "Event/BDEvent.h"
class BDSymbolTable;

class BDSymbolWidget : public QWidget,
	public EvBus::EventHandler<BDLoadSymbolsEvent>,
	public EvBus::EventHandler<BDComplieEvent>,
	public EvBus::EventHandler<BDProjectSaveEvent>,
	public EvBus::EventHandler<BDFillLocalVariableToTableEvent>
{
	Q_OBJECT
public:
	explicit BDSymbolWidget(QWidget *parent = nullptr);
protected:
	virtual void onEvent(BDLoadSymbolsEvent& ev);
	virtual void onEvent(BDComplieEvent& ev);
	virtual void onEvent(BDProjectSaveEvent& ev);
	virtual void onEvent(BDFillLocalVariableToTableEvent& ev);
private:
	Ui::BDSymbolWidgetClass ui;
};

BDSymbolWidget.cpp

#include "BDSymbolWidget.h"

BDSymbolWidget::BDSymbolWidget(QWidget *parent)
	: QWidget(parent)
{
	ui.setupUi(this);
	

	EvBus::EventBus::AddHandler<BDLoadSymbolsEvent>(*this);
	EvBus::EventBus::AddHandler<BDComplieEvent>(*this);
	EvBus::EventBus::AddHandler<BDProjectSaveEvent>(*this);
	EvBus::EventBus::AddHandler<BDFillLocalVariableToTableEvent>(*this);
	
}

void BDSymbolWidget::onEvent(BDLoadSymbolsEvent& ev)
{
	auto vctSymboPath = ev.SymbolFilePath();
	...
}

三、通知

BDAplication.cpp

void BDAplication::LoadSymbolFiles(const std::vector<QString>& vctFiles)
{
	BDLoadSymbolsEvent ev(*this);
	ev.SymbolFilePath(vctFiles);

	EvBus::EventBus::FireEvent(ev);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值