首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【DIY数字仪表】使用TouchGFX的MVP架构来实现GUI和硬件的双向交互(2)

【DIY数字仪表】使用TouchGFX的MVP架构来实现GUI和硬件的双向交互(2)

作者头像
AIoT-KK
发布2020-07-28 15:28:27
发布2020-07-28 15:28:27
2.2K0
举报

作者:KK

上期回顾:(点此连接跳转),上期介绍了如何将TouchGFX移植到rtthread操作系统。 本期将简单介绍一下TouchGFX的MVP架构使用方法。


演示视频:

1.如何理解TouchGFX中Screen的MVP架构

MVP的全称为Model-View-Presenter,Model提供数据,View负责显示,Controller/Presenter负责逻辑的处理。MVP与MVC有着一个重大的区别:在MVP中View并不直接使用Model,它们之间的通信是通过Presenter (MVC中的Controller)来进行的,所有的交互都发生在Presenter内部。 用一句话来概括MVP:所有数据仅能保存在称为 Model 的类对象(简单说就是一种文件)中,Presenter是视图(View)与Model之间的纽带,View只能通过Presenter来读取数据。 MVP优点:

  • 模型与视图完全分离,我们可以修改视图而不影响模型;
  • 可以更高效地使用模型,因为所有的交互都发生在一个地方——Presenter内部;
  • 我们可以将一个Presenter用于多个视图,而不需要改变Presenter的逻辑。这个特性非常的有用,因为视图的变化事件总是比模型的变化频繁;
  • 如果我们把逻辑放在Presenter中,那么我们就可以脱离用户接口来测试这些逻辑(单元测试)

Screen概念 在TouchGFX应用程序中,开发者可以根据项目需要创建任意数量的Screen。这里的Screen是指UI元素及其相关的业务逻辑。一个Screen通常包括两个内容:一个View,涵盖该Screen上显示的所有空间;一个Presenter,涵盖该Screen上所有的业务逻辑。 TouchGFX有自己的内存分配方案,它仅分配给最大的View和最大的Presenter,分配的RAM可以在应用程序的所有Screen上重用。 Model Model类是一个单例,始终处于活动状态,并具有两个目的:

  1. 存储UI的状态信息。切换Screen时,View和Presenter被释放,因此它们不能用于存储应在Screen切换期间保留的信息。所有,需要Model来存储UI的状态信息。
  2. 充当与后端系统的接口,在当前活动Screen之间来回传递事件。 Model类有一个自动设置指向当前活动Presenter的指针。当Model中发生更改时,会将更改通知给当前活动的Presenter。这是通过应用程序的Model Listener接口中的方法实现的。

View View类(或者更具体地说,是从TouchGFX View类派生的用户定义类)包含在当前Screen显示的所有控件。他还包含一个setScreen和一个tearDownScreen函数,当进入、退出当前Screen时,该函数会自动调用。通常,可以在setupScreen函数中设置控件。 View还包含了一个可以指向关联的Presenter的指针。该指针由框架自动设置。使用此指针,你可以将UI事件传递给Presenter。 Presenter Presenter类(也是从TouchGFX Presenter类派生的用户定义类)负责当前活动Screen的业务逻辑。它将接收来自Model的“后端”事件,以及来自View的UI事件,并决定采取哪种操作。 小结 在MVP架构中,所有数据只能保持在Model的类对象中,Presenter是View与Model之间的纽带,View只能通过Presenter来读取数据,而不能直接读取Model中的数据。

2.使用TouchGFX MVP来实现UI和硬件的双向交互

Model-View-Presenter 软件架构:

2.1 用户通过UI按键控制硬件LED

使用TouchGFXDesigner设计界面,添加toggleButton按钮

利用MVP架构填写代码:

2.2 把CPU使用率参数传递给UI显示

使用TouchGFXDesigner制作cpu实用率的自定义控件,然后将这个控件添加到需要的界面

cpu的使用率算法可以直接在rtthread的github中rt-thread\examples\kernel文件下找到,具体实现原理网上有很多分析的文章,这里就不再分析了。 下边直接把CPU的使用率参数通过Model层发送给Screen。

代码开源地址:https://gitee.com/Aladdin-Wang/hellotouchGFX

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AIoT开源项目分享 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.如何理解TouchGFX中Screen的MVP架构
  • 2.使用TouchGFX MVP来实现UI和硬件的双向交互
    • 2.1 用户通过UI按键控制硬件LED
    • 2.2 把CPU使用率参数传递给UI显示
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档