HMI-33-【运动模式】补上油量表和水温表

简介: 上一篇,以为是做了一个收尾,写了灯光控制面板和底部的信息栏,但是,有位眼见的小伙伴`江山壹角`,直接不给我面子,说我的水温表和油量表不会动。截图位置,我记仇哈。

HMI-33-【运动模式】补上油量表和水温表

​ 上一篇,以为是做了一个收尾,写了灯光控制面板和底部的信息栏,但是,有位眼见的小伙伴江山壹角,直接不给我面子,说我的水温表和油量表不会动。截图位置,我记仇哈。

image-20220217220433112

​ 所以今天我们的这篇文章就是实现下水温表和油量表,别看就加起来就16个方块,我写了两个晚上,今天这个也顺带吧转向带的控制代码横展过来,目前呢,转向灯用的还是定时器控制的 ,可以在不同的电脑上有不同的表现了,后期小伙伴如果发现频率不同步的话,可以使用线程产生定时器,来替换我的定时器即可。


[TOC]

关键字: HMI油量表水温表uiQt

增加转向灯控制代码

​ 转向灯控制代码不用动脑子,我UI也是从舒适模式粘贴过来的,所带代码也是可以横展过来的。核心部分如下:

void MDS_LightControl::selfInspection()
{
    ui->label_turnlight_l->show();
    ui->label_turnlight_r->show();
    QTimer::singleShot(2000,this,[=](){
        ui->label_turnlight_l->hide();
        ui->label_turnlight_r->hide();});
}

void MDS_LightControl::setTurnLight(turnLight light)
{
    switch (light) {
    case m_turnLightLeft:
    {
        if(m_timerTurnRight->isActive())
        {
            m_timerTurnRight->stop();
            ui->label_turnlight_r->hide();
        }
        m_timerTurnLeft->start(1000);
        break;
    }
    case m_turnLightRight:
    {
        if(m_timerTurnLeft->isActive())
        {
            m_timerTurnLeft->stop();
            ui->label_turnlight_l->hide();
        }
        m_timerTurnRight->start(1000);
        break;
    }
    case m_turnLightWarning:
    {

        m_timerTurnLeft->stop();
        m_timerTurnRight->stop();
        m_timerTurnLeft->start(1000);
        m_timerTurnRight->start(1000);
        break;
    }
    case m_turnLightOff:
    {
        if(m_timerTurnLeft->isActive())
        {
            m_timerTurnLeft->stop();
            ui->label_turnlight_l->hide();
        }
        if(m_timerTurnRight->isActive())
        {
            m_timerTurnRight->stop();
            ui->label_turnlight_r->hide();
        }
        break;
    }
    }
}

水温表和油量表代码实现

​ 这个在计算是时候,我用了程序计算机,哎,这个计算机,谁用谁知道,除法不带小数呀,开始算的大半段都白写了,后面才反应过来。小伙伴们要注意哦。运动模式下的水温表和油量表和舒适模式不一样,不是连续的,类似于一格一格的吧。具体可以看下面的动画。这里直接贴上核心代码:

/**
 * @brief MDS_Center::drawOil
 * @param angle
 * 绘制油量表
 */
void MDS_Center::drawOil(int percentage)
{
    //半径350
    QPainter painter(ui->label_drawOil);
    painter.setRenderHint((QPainter::SmoothPixmapTransform));
    painter.setRenderHint(QPainter::HighQualityAntialiasing);
    painter.translate(-43,-195);
    painter.save();
    painter.setPen(QPen(Qt::white,5,Qt::SolidLine));


    if(percentage>0 && percentage <= 13)
    {
        painter.drawArc(-315,-315,630,630,279*16,4*16);
    }
    else if(percentage>13 && percentage<=25){
        painter.drawArc(-315,-315,630,630,279*16,4*16);
        painter.drawArc(-315,-315,630,630,285*16,3*16);
    }
    else if(percentage>25 && percentage<=38){
        painter.drawArc(-315,-315,630,630,279*16,4*16);
        painter.drawArc(-315,-315,630,630,285*16,3*16);
        painter.drawArc(-315,-315,630,630,290*16,3*16);
    }
    else if(percentage>38 && percentage<=50){
        painter.drawArc(-315,-315,630,630,279*16,4*16);
        painter.drawArc(-315,-315,630,630,285*16,3*16);
        painter.drawArc(-315,-315,630,630,290*16,3*16);
        painter.drawArc(-315,-315,630,630,295*16,3*16+8);
    }
    else if(percentage>50 && percentage<=63){
        painter.drawArc(-315,-315,630,630,279*16,4*16);
        painter.drawArc(-315,-315,630,630,285*16,3*16);
        painter.drawArc(-315,-315,630,630,290*16,3*16);
        painter.drawArc(-315,-315,630,630,295*16,3*16+8);
        painter.drawArc(-315,-315,630,630,301*16+8,3*16+6);
    }
    else if(percentage>63 && percentage<=75){
        painter.drawArc(-315,-315,630,630,279*16,4*16);
        painter.drawArc(-315,-315,630,630,285*16,3*16);
        painter.drawArc(-315,-315,630,630,290*16,3*16);
        painter.drawArc(-315,-315,630,630,295*16,3*16+8);
        painter.drawArc(-315,-315,630,630,301*16+8,3*16+6);
        painter.drawArc(-315,-315,630,630,307*16,3*16);
    }
    else if(percentage>76 && percentage<=88){
        painter.drawArc(-315,-315,630,630,279*16,4*16);
        painter.drawArc(-315,-315,630,630,285*16,3*16);
        painter.drawArc(-315,-315,630,630,290*16,3*16);
        painter.drawArc(-315,-315,630,630,295*16,3*16+8);
        painter.drawArc(-315,-315,630,630,301*16+8,3*16+6);
        painter.drawArc(-315,-315,630,630,307*16,3*16);
        painter.drawArc(-315,-315,630,630,312*16,3*16);
    }
    else if(percentage>88 && percentage<=100){
        painter.drawArc(-315,-315,630,630,279*16,4*16);
        painter.drawArc(-315,-315,630,630,285*16,3*16);
        painter.drawArc(-315,-315,630,630,290*16,3*16);
        painter.drawArc(-315,-315,630,630,295*16,3*16+8);
        painter.drawArc(-315,-315,630,630,301*16+8,3*16+6);
        painter.drawArc(-315,-315,630,630,307*16,3*16);
        painter.drawArc(-315,-315,630,630,312*16,3*16);
        painter.drawArc(-315,-315,630,630,317*16,4*16);
    }

    painter.restore();
}
/**
 * @brief MDS_Center::drawWater
 * @param angle
 * 绘制水温表
 */
void MDS_Center::drawWater(int percentage)
{
    QPainter painter(ui->label_drawWater);
    painter.setRenderHint((QPainter::SmoothPixmapTransform));
    painter.setRenderHint(QPainter::HighQualityAntialiasing);
    painter.translate(257,-195);
    painter.save();
    painter.setPen(QPen(Qt::white,5,Qt::SolidLine));


    if(percentage>0 && percentage <= 13)
    {
        painter.drawArc(-315,-315,630,630,257*16,4*16);
    }
    else if(percentage>13 && percentage<=25){
        painter.drawArc(-315,-315,630,630,252*16,3*16);
        painter.drawArc(-315,-315,630,630,257*16,4*16);
    }
    else if(percentage>25 && percentage<=38){
        painter.drawArc(-315,-315,630,630,247*16,3*16);
        painter.drawArc(-315,-315,630,630,252*16,3*16);
        painter.drawArc(-315,-315,630,630,257*16,4*16);
    }
    else if(percentage>38 && percentage<=50){
        painter.drawArc(-315,-315,630,630,241*16,4*16);
        painter.drawArc(-315,-315,630,630,247*16,3*16);
        painter.drawArc(-315,-315,630,630,252*16,3*16);
        painter.drawArc(-315,-315,630,630,257*16,4*16);
    }
    else if(percentage>50 && percentage<=63){
        painter.drawArc(-315,-315,630,630,235*16,4*16);
        painter.drawArc(-315,-315,630,630,241*16,4*16);
        painter.drawArc(-315,-315,630,630,247*16,3*16);
        painter.drawArc(-315,-315,630,630,252*16,3*16);
        painter.drawArc(-315,-315,630,630,257*16,4*16);
    }
    else if(percentage>63 && percentage<=75){
        painter.drawArc(-315,-315,630,630,230*16,3*16);
        painter.drawArc(-315,-315,630,630,235*16,4*16);
        painter.drawArc(-315,-315,630,630,241*16,4*16);
        painter.drawArc(-315,-315,630,630,247*16,3*16);
        painter.drawArc(-315,-315,630,630,252*16,3*16);
        painter.drawArc(-315,-315,630,630,257*16,4*16);
    }
    else if(percentage>76 && percentage<=88){
        painter.drawArc(-315,-315,630,630,225*16,3*16);
        painter.drawArc(-315,-315,630,630,230*16,3*16);
        painter.drawArc(-315,-315,630,630,235*16,4*16);
        painter.drawArc(-315,-315,630,630,241*16,4*16);
        painter.drawArc(-315,-315,630,630,247*16,3*16);
        painter.drawArc(-315,-315,630,630,252*16,3*16);
        painter.drawArc(-315,-315,630,630,257*16,4*16);
    }
    else if(percentage>88 && percentage<=100){
        painter.drawArc(-315,-315,630,630,219*16,4*16);
        painter.drawArc(-315,-315,630,630,225*16,3*16);
        painter.drawArc(-315,-315,630,630,230*16,3*16);
        painter.drawArc(-315,-315,630,630,235*16,4*16);
        painter.drawArc(-315,-315,630,630,241*16,4*16);
        painter.drawArc(-315,-315,630,630,247*16,3*16);
        painter.drawArc(-315,-315,630,630,252*16,3*16);
        painter.drawArc(-315,-315,630,630,257*16,4*16);
    }

    painter.restore();
}

目前进度


说明:

本项目中所使借鉴原型来自:[吉利] 博瑞GE | 仪表HMI设计吉利汽车HMI项目

设计图的所有权和解释权都归吉利汽车所有。

本项目所有资源文件均有打不死的小海复刻制作。

本项目代码暂时不会开源,有需要的源码的可与我联系,左上角二维码加微信。

本项目仅限学习交流、禁止商业使用。


博客签名2021

相关文章
|
1月前
|
人工智能 搜索推荐 安全
趣步运动卷轴模式系统开发技术规则
趣步运动卷轴模式系统开发结合运动健康、数字资产积累与社交互动,通过大数据、云计算、区块链及物联网技术,实时记录并分析用户运动数据,确保奖励公平准确。平台内置社交功能,鼓励用户分享成果,形成积极社群氛围。系统以用户为中心,注重技术创新与安全性保障,采用高效后端架构和先进移动端技术,打造流畅交互体验。此外,趣步还构建了包括运动装备、健康咨询等在内的综合生态体系,利用AI技术提升用户体验。
HMI-28-【运动模式】给速度表添加数字显示
今天我要做的功能时给速度表添加数字显示。就是下图中左侧的`888`
HMI-28-【运动模式】给速度表添加数字显示
HMI-30-【运动模式】仪表右侧模块开始编写
今天喝了点小茶水,来了点写代码的感觉,那么今天就尝试吧运动模式仪表右侧的模块写了,我的资源文件中,只有音乐,所以右侧模块还是先把框架搭好,仅实现音乐模块。
HMI-30-【运动模式】仪表右侧模块开始编写
HMI-27-【运动模式】解决转速表指针弧光
今天我们要解决的是液晶仪表中运动模式下,转速表指针问题,因为转速表不是标准的圆,需要处理一下下。因为这个代码时间有点长,现在还得好好缓缓,好多接口还得在回去看舒适模式,尽量还是保持统一。
|
传感器 物联网
基于小熊派光强传感器BH1750状态机驱动项目再度升级(带上位机曲线显示)
基于小熊派光强传感器BH1750状态机驱动项目再度升级(带上位机曲线显示)
84 0
|
编解码 计算机视觉 Python
2023年电赛---运动目标控制与自动追踪系统(E题)关于网友的问题回复
2023年电赛---运动目标控制与自动追踪系统(E题)关于网友的问题回复
420 0
|
API 数据处理
2022年十月份电赛OpenMV巡线方案(2)---主控代码详细分析
2022年十月份电赛OpenMV巡线方案(2)---主控代码详细分析
177 0
|
定位技术
巧用千寻位置GNSS软件|CAD功能全解析
千寻位置GNSS软件中的CAD功能,用于已有 CAD的图形的导入和编辑,并且可以对 CAD图形已有线条进行线放样,在日常测绘工作中十分常见。下面向各位介绍CAD功能的使用技巧。 点击【测量】->【CAD】,进入 CAD功能如图 5.3-1所示。以下详细介绍此界面。点 击【3D】,进入 3D视图,如图 5.3-2所示。
巧用千寻位置GNSS软件|CAD功能全解析
|
存储 数据采集 定位技术
巧用千寻位置GNSS软件|点测量采集技巧
点测量是测量中重要的节点,在测量工作的信息处理分析中发挥着重要作用。本期将给各位带来使用千寻位置GNSS软件采集地形点、控制点、快速点、连续点、房角点和倾斜点的操作技巧。
巧用千寻位置GNSS软件|点测量采集技巧
|
数据采集 定位技术
巧用千寻位置GNSS软件|倾斜校准有技巧
当进入标配千寻位置GNSS软件的RTK手部操作主界面,主界面包含三个功能键,分别是气泡校准,磁步进校准,磁偏角校准。进行磁北校准需要四个步骤,下面将详细地介绍这四个步骤的操作
巧用千寻位置GNSS软件|倾斜校准有技巧