TouchGFX MVP架构 头文件解析

在这里插入图片描述
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

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言文件解析是指对C语言编程中使用的文件进行分析,以便在编译阶段正确地向程序中插入所需的函数和数据类型声明。文件解析通常由词法分析器来完成。 词法分析器是编译器中的一个重要组成部分,用于将源代码分割成一个个词法单元,以便后续分析和处理。在文件解析中,词法分析器主要完成以下任务: 1. 识别和提取文件中的词法单元:词法单元可以是关键字、标识符、运算符、常量或分隔符等。词法分析器通过识别文件中的这些词法单元,将文件分割成一个个独立的部分,便于后续分析。 2. 识别文件中的函数和数据类型声明:词法分析器可以通过判断特定的词法单元组合来确定文件中是否存在函数或数据类型的声明。例如,通过识别关键字 "int" 及其后面的标识符,可以判断出文件中存在一个整型变量的声明。 3. 处理文件中的宏定义和条件编译指令:词法分析器还需要处理文件中的宏定义和条件编译指令。宏定义可以将一组代码或常量定义为一个宏,词法分析器需要将其识别出来,以便编译器在后续处理时正确地进行替换。条件编译指令根据预定义的条件判断是否编译某段代码,词法分析器需要识别这些指令,以确定是否应该编译相关代码。 总的来说,C语言文件解析是通过词法分析器对文件进行识别和拆分,以便编译器在编译阶段能够正确地插入所需的函数和数据类型声明,保证程序的正确性和可执行性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值