TouchGFX MVP架构 头文件解析

本文介绍了TouchGFX用户界面采用的Model-View-Presenter (MVP) 架构模式,详细阐述了Model、Presenter及View组件之间的交互原理。Model负责后台逻辑处理,Presenter作为中间层连接Model与View,View则直接操作UI组件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
TouchGFX user interfaces follow an architectural pattern known as Model-View-Presenter (MVP) which is a derivation of the Model-View-Controller (MVC) pattern. Both of them are widely used for building user interface applications.

/************ Model.hpp ************/
class ModelListener;

class Model
{
public:
    Model();

    void bind(ModelListener* listener)
    {
        modelListener = listener;
    }

    void tick();
protected:
    ModelListener* modelListener;
};
  1. Model(): C++构造函数,与class名称相同且没有任何返回值。
  2. Model::tick(): One way is to perform a task check in the Model class once in every frame.
/************ ModelListener.hpp ************/
class ModelListener
{
public:
    ModelListener() : model(0) {}

    virtual ~ModelListener() {}

    void bind(Model* m)
    {
        model = m;
    }
protected:
    Model* model;
};

1.ModelListener() : model(0) {}:构造函数,以初始化列表形式将内部私有变量model初始化为NULL
2. virtual ~ModelListener() {}:构造函数重载,~用在函数之前,表示该函数为构造函数。virtual 则表示该函数为虚函数。

/************ Screen1Presenter.hpp ************/
using namespace touchgfx;

class Screen1View;

class Screen1Presenter : public touchgfx::Presenter, public ModelListener
{
public:
    Screen1Presenter(Screen1View& v);

    /**
     * The activate function is called automatically when this screen is "switched in"
     * (ie. made active). Initialization logic can be placed here.
     */
    virtual void activate();

    /**
     * The deactivate function is called automatically when this screen is "switched out"
     * (ie. made inactive). Teardown functionality can be placed here.
     */
    virtual void deactivate();

    virtual ~Screen1Presenter() {};

private:
    Screen1Presenter();

    Screen1View& view;
};
  1. Screen1Presenter(Screen1View& v); 默认的构造函数以View指针为入参,在官方提供的函数实现中,入参v用于初始化私有变量Screen1View& view
Screen1Presenter::Screen1Presenter(Screen1View& v)
    : view(v)
{

}
/************ Screen1View.hpp ************/
class Screen1View : public Screen1ViewBase
{
public:
    Screen1View();
    virtual ~Screen1View() {}
    virtual void setupScreen();
    virtual void tearDownScreen();

	/** user defined function **/
    virtual void addRandomPoint();
    virtual void clearGraph();

    virtual void handleTickEvent();

protected:
    int tickCounter;
};

Screen1View.hpp 中用到的知识点与前面介绍文件重复,不在此赘述。

现总结如下:

  1. Model 是TouchGFX MVP架构中生命周期最长的组件,不会随着Screen的切换被清除,所以,如果后台程序需要与UI组件进行通信,例如创建消息队列或邮箱,应当在Model的构造函数中进行创建和初始化。确切来讲,应当是在virtual ~ModelListener() {}函数中。但是,RTOS组件的初始化应尽量设置在内核启动之前,实际操作中个人不推荐把与UI通信的系统组件放置在model层中进行初始化。
  2. PresenterModelListener的子类,而ModelModelListener通过指针变量相互绑定,因此Presenter可以访问在Model.cpp (属于 Model类) 中定义的函数。
  3. Presenter的构造函数以指向View的指针作为入参,用来初始化内部私有变量view,因此,Presenter同样也可以访问View中的函数。
  4. 总结 2,3两点,我们可以发现 Presenter起到桥梁的作用,将ModelView连接到一起。View中定义的函数用于直接操作UI组件,Model则负责与后台对接,例如处理信号量或消息队列。

参考资料

C++类中成员变量的初始化有两种方式
C++11 中的继承构造函数
C++构造函数的重载
c++ 中. 和 ->,波浪号 ~ 符号怎么用
C++中virtual(虚函数)的用法
TouchGFX MVP通信架构
The Screen Concept - TouchGFX
How to update other tasks from the TouchGFX GUI
How to Update the TouchGFX GUI from other tasks

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值