打印
[GUI]

【STM32H750B-DK评测】五:线性进度条的运用

[复制链接]
449|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 数码小叶 于 2022-9-9 21:48 编辑

上一篇已经可以在屏幕上显示温度和湿度,但是只是简单的证明数据获取和显示ok了,但并不是最后的温度显示界面,并且还缺少对温度比较的显示。因此新建一个页面,并且运用touchGFX的进度条组件,来直观显示温度是否超过设定值。


touchGFX提供的线性进度条,可以说是高度的灵活自由,几乎每个参数都可以达到自由定制,以实现自己想要的效果



可以使用其自定义好的角度以及大小,这样外观来的更快,当然也可以选择自己的素材,只要导入就可,预先定义好的素材实际已经涵盖很全了




然后就是线性进度条的大小、坐标、颜色、填充范围,步进长度等具体参数



进度条的填充范围是可以独立设置的,这意味着填充区域是自由的,但这里还是设置的完全填满进度条轮廓,以达到刚好看着是一个整体,最后效果如下


这样两个页面就设置完成了,一个负责设置温度和湿度的阈值,一个负责显示结果。温度的获取,沿用上一篇的流程,这里只需要增加线性进度条的填充以及超过阈值,颜色变化即可
对于,进度条的填充,可以查看LineProgress这个类里定义的方法,class LineProgress : public AbstractProgressIndicator,里面定义了很多的设置方法


可以查看填充方法的具体实现代码:
void LineProgress::setValue(int value)
{
    if (rangeSteps > 0)
    {
        AbstractProgressIndicator::setValue(value);
        int progress = (int)AbstractProgressIndicator::getProgress(rangeSteps);
        CWRUtil::Q5 r(rangeSteps);
        CWRUtil::Q5 p(progress);
        CWRUtil::Q5 x = startX + (endX - startX) / r * p;
        CWRUtil::Q5 y = startY + (endY - startY) / r * p;
        line.updateEnd(x, y);
    }
}


这样填充实现起来也就容易了:
    shiducurrentValue = lineshidu.getValue();
    if(lastshidu - shiducurrentValue >0)
    {
    shiduincrease = true;
    }
    else
    {
     shiduincrease = false;
    }
    shidunextValue = shiduincrease == true ? shiducurrentValue+(lastshidu - shiducurrentValue) : shiducurrentValue-(shiducurrentValue-lastshidu);
    lineshidu.setValue(shidunextValue);
只需要先判断出进度条是要增还是要减,再调用填充函数即可。

对于阈值改变颜色,也容易实现了,将线性进度条的百分值和第一页的设置值进行比较即可,高于就设置红色,低于就显示绿色
    if(wendunextValue >wenduAlarm)
    {
     linewenduPainter.setColor(touchgfx::Color::getColorFromRGB(255, 0, 0));
    }
    else
    {
     linewenduPainter.setColor(touchgfx::Color::getColorFromRGB(38, 212, 44));
    }

最后的视频效果:





使用特权

评论回复
沙发
数码小叶|  楼主 | 2022-9-9 21:50 | 只看该作者
依旧是沙发@21小跑堂

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

103

主题

2540

帖子

19

粉丝