查看: 1375|回复: 1

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

[复制链接]
  • TA的每日心情
    开心
    2024-4-25 10:04
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2024-4-22 20:22:52 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 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;
    复制代码
    1.png

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

    3. }
    复制代码
    2.png

    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.     }
    复制代码
    3.png


    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. }
    复制代码


    4.png

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

    IMG_5890 00_00_00-00_00_30.gif

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


    有两个解决方案

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

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




    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    前天 10:54
  • 签到天数: 186 天

    连续签到: 2 天

    [LV.7]常住居民III

    发表于 2024-4-26 10:01:16 | 显示全部楼层
    给Model类做一个静态成员变量呢?
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

    手机版|小黑屋|与非网

    GMT+8, 2024-12-24 02:24 , Processed in 0.131591 second(s), 18 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.