22、touchGFX学习Model-View-Presenter设计模式

touchGFX采用MVP架构,如下所示:
22、touchGFX学习Model-View-Presenter设计模式_第1张图片
本文界面如下所示:
22、touchGFX学习Model-View-Presenter设计模式_第2张图片
本文将实现两个操作:
1、触摸屏点击开关按键实现打印开关显示信息,模拟开关灯效果
2、板载案按键控制触摸屏LED灯的显示和隐藏

一、触摸屏点击开关按键实现打印开关显示信息,模拟开关灯效果

实现的方向为view->present->model

1、添加led开关交互事件:button_clicked_led

22、touchGFX学习Model-View-Presenter设计模式_第3张图片

2、screenView.hpp中声明button_clicked_led函数,再到screenView.cpp中定义此函数并执行通知Presenter层

22、touchGFX学习Model-View-Presenter设计模式_第4张图片
22、touchGFX学习Model-View-Presenter设计模式_第5张图片

3、screenPresenter.hpp中声明button_clicked_led函数,screenPresenter.cpp中定义此函数将消息传递给model层

22、touchGFX学习Model-View-Presenter设计模式_第6张图片
22、touchGFX学习Model-View-Presenter设计模式_第7张图片

4、Model.hpp中声明button_clicked_led函数,Model.cpp中定义此函数将依据此消息执行开关灯操作

22、touchGFX学习Model-View-Presenter设计模式_第8张图片
22、touchGFX学习Model-View-Presenter设计模式_第9张图片
如此即可完成触摸屏开关控制硬件led灯的亮灭
22、touchGFX学习Model-View-Presenter设计模式_第10张图片

二、板载案按键控制触摸屏LED灯的显示和隐藏

流程方向:model->modelListener->present->view

1、ModelListener.hpp中声明函数notify_key_event,并在Model.cpp中定义此函数,将外部按键的动作通知给modelListener

因为ModelListener被Model继承了,也被screenPresenter继承了
22、touchGFX学习Model-View-Presenter设计模式_第11张图片
22、touchGFX学习Model-View-Presenter设计模式_第12张图片

2、screenPresenter.hpp中声明函数notify_key_event,并在screenPresenter.cpp中定义此函数,并通知给view

22、touchGFX学习Model-View-Presenter设计模式_第13张图片
22、touchGFX学习Model-View-Presenter设计模式_第14张图片

3、screenView.hpp中声明函数notify_key_event,并在screenView.cpp中定义此函数,并更改界面灯的显示隐藏

22、touchGFX学习Model-View-Presenter设计模式_第15张图片
22、touchGFX学习Model-View-Presenter设计模式_第16张图片

image1_led是这个灯的名字哈
22、touchGFX学习Model-View-Presenter设计模式_第17张图片
如此就实现了外部按键控制触摸屏

三、补充另一个:按键切换屏幕背景色

22、touchGFX学习Model-View-Presenter设计模式_第18张图片
添加KeyController.cpp|KeyController.hpp文件
22、touchGFX学习Model-View-Presenter设计模式_第19张图片

KeyController.cpp

#include "KeyController.hpp"
#include "Key_Driver.h"

using namespace touchgfx;

void KeyController::init()//按键初始化
{
    //Key_Init();//在BSP中统一初始化
}

bool KeyController::sample(uint8_t& key)//按键扫描
{
    uint8_t value = 0;

    if(Key_ScanPin(&value) < 0)return false;//Key_ScanPin按键扫描并获取键值
    key = value;
    return true;
}

KeyController.hpp

#ifndef SCREENVIEW_HPP
#define SCREENVIEW_HPP

#include 
#include 
#include "stdint.h"

class screenView : public screenViewBase
{
public:
    screenView();
    virtual ~screenView() {}
    virtual void setupScreen();
    virtual void tearDownScreen();
    virtual void button_clicked_led();
    virtual void notify_key_event(uint8_t event,uint8_t KeyValue);
protected:
};

#endif // SCREENVIEW_HPP

TouchGFXHAL.cpp添加按键执行代码
打开​​TouchGFXHAL.cpp​​​文件新建一个​​KeyController​​对象
然后在​​void TouchGFXHAL::initialize()​​里面这个对象赋值给系统,记得调用初始化函数
22、touchGFX学习Model-View-Presenter设计模式_第20张图片
如此即可实现按键改变屏幕背景色

三、参考文章

没使用过touchGFX则先看视频:https://www.yuanzige.com/course/detail/80229
Model-View-Presenter设计模式示例:https://smallash.blog.csdn.net/article/details/127047799?spm=1001.2014.3001.5502

四、学习笔记

你可能感兴趣的:(STM32,学习,设计模式)