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);
}
使用&spm=1001.2101.3001.5002&articleId=157769142&d=1&t=3&u=75690033fc3344c5bee2ce9136f03379)
484

被折叠的 条评论
为什么被折叠?



