1回答

0收藏

[评测分享] 【STM32H735-DK 测评】⑩TouchGFX切换页面如何保存数据

#板卡评测 #板卡评测 2404 人阅读 | 1 人回复 | 2024-04-22

本帖最后由 eefocus_3880118 于 2024-4-22 20:27 编辑

上一篇文章我们做了两个页面的切换,但是有个小问题,当我在有slider的页面中改变了其value,然后切换页面后,再回来,slider的value又变成了默认值,不是离开页面之前的值。

这是因为TouchGFX使用的MVP结构中,M是公用的,每一个页面都有自己的V和P,这两个的内容是动态分配的,也就意味着,同一时间只能有一个V和P,当这个页面被新的页面顶替后,旧的页面就会被摧毁。这样做的好处就是可以节约RAM。

那么为了实现页面切换再切换回来还要保持原样,我们就需要做一下缓存,把slider的value缓存到M中,然后在再次切回本页面时从M中把之前保存的slider的value重新加载到页面中

先在Model.hpp中创建一个保存、获取Slider的Value参数的函数
  1. void saveSliderValue(int saveSliderValue)
  2.     {
  3.         sliderValue = saveSliderValue;
  4.     }

  5.     int getSliderValue()
  6.     {
  7.         return sliderValue;
  8.     }
复制代码
还有用于保存数据的变量
  1. int sliderValue;
复制代码

然后初始化该参数,该参数的默认值和Slider的默认value一致,因为回头在slider的那个页面setup时会加载这个参数,为了第一次上电时slider的初始值正确,就要写90(其实在setup时增加一个flag也行,当第一次进入时不加载,第二次及以后才加载)
  1. Model::Model() : modelListener(0), sliderValue(90)
  2. {

  3. }
复制代码

M中的内容会被P调用,所以在Screen2Presenter.hpp也增加保存、获取Slider的Value参数的函数
  1.     void saveSliderValue(int SliderValue)
  2.     {
  3.         model->saveSliderValue(SliderValue);
  4.     }

  5.     int getSliderValue()
  6.     {
  7.         return model->getSliderValue();
  8.     }
复制代码


P会被V调用,所以在V中就要实际去做读写的操作了。在页面加载时读取参数,设置给slider。页面退出时把slider的value读取出来保存起来

  1. void Screen2View::setupScreen()
  2. {
  3.     slider1.setValue(presenter->getSliderValue());
  4.     Screen2ViewBase::setupScreen();
  5. }

  6. void Screen2View::tearDownScreen()
  7. {
  8.     presenter->saveSliderValue(slider1.getValue());
  9.     Screen2ViewBase::tearDownScreen();
  10. }
复制代码



这样就可以实现切换页面时实现数据的保存和加载,效果如下


如果你有其他的东西需要保存、加载,大致的逻辑是本文介绍的一致,不同的就是在setupScreen、tearDownScreen中对控件参数的读和写,这里有一个困难点就是对于初学者来说,有太多的API,例如我想去设置slider的value却不知道应该调用哪个函数。


有两个解决方案

1.去TouchGFX的网站看文档,里面有所有的API,慢慢的查。

2.进入到ViewBase.cpp,里面有一个Screen2ViewBase函数,这个就是我们再软件中绘制的界面,自动生成的代码,里面又会有设置slider的value的函数,照着抄就行(但是如果你想要的接口并不会在绘制界面时调用,例如读取slider的value,那就只有方法1了)




分享到:
回复

使用道具 举报

回答|共 1 个

倒序浏览

沙发

stm1024

发表于 2024-4-26 10:01:16 | 只看该作者

给Model类做一个静态成员变量呢?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条