HMI-61-【多媒体】空调部分 2

简介: 昨天我们已经实现了自定义的按钮了,今天我们把已经定义好的按钮和我们的控制台联动起来,使我们的多媒体部分不仅可以触屏控制,可一个使用控制台的旋钮来控制。演示如下

头图

前言

如果这个系列Qt 汽车 HMI 仪表文章你都看过,或者大部分看过,知道整个项目的一个大致,那么可以接着看下去,如果是第一次就直接看到了这篇文章,那么多半应该是云里雾里的,因为写到现在,基本就是开发流水账了。除了个别知识点获取有参考价值,其他的应该没有太多的价值。

如果对这个项目感兴趣,那么有两个办法

1 联系作者(也就是我),获取源码

2 把Qt 汽车 HMI 仪表从头看看,至少知道我想要做什么,才能知道我现在在做什么。

HMI-61-【多媒体】空调部分 2

​ 昨天我们已经实现了自定义的按钮了,今天我们把已经定义好的按钮和我们的控制台联动起来,使我们的多媒体部分不仅可以触屏控制,可一个使用控制台的旋钮来控制。演示如下

☑当前进度

​ 实现了多媒体空调部分控件和控制台旋钮联动,如下图所示


[toc]

关键字: HMIMultifunctionQtQMediaPlayer收音机

1 控制台部分

​ 控制台部分主要就是将新增的 5个按钮的按下和松开信号发送出去。代码如下:

void MainControl::on_pushButton_centerOk_pressed()
{
    emit signal_ControlButton(0,1);
}


void MainControl::on_pushButton_centerOk_released()
{
    emit signal_ControlButton(0,0);
}


void MainControl::on_pushButton_centerUp_pressed()
{
    emit signal_ControlButton(1,1);
}


void MainControl::on_pushButton_centerUp_released()
{
    emit signal_ControlButton(1,1);
}


void MainControl::on_pushButton_centerDoen_pressed()
{
    emit signal_ControlButton(2,1);
}


void MainControl::on_pushButton_centerDoen_released()
{
    emit signal_ControlButton(2,1);
}


void MainControl::on_pushButton_centerLeft_pressed()
{
    emit signal_ControlButton(3,1);
}


void MainControl::on_pushButton_centerLeft_released()
{
    emit signal_ControlButton(3,1);
}


void MainControl::on_pushButton_centerRight_pressed()
{
    emit signal_ControlButton(4,1);
}


void MainControl::on_pushButton_centerRight_released()
{
    emit signal_ControlButton(4,1);
}

​ 信号传递路径如下

image-20220502234038974

2 空调面板处理

​ 空调面板处理部分有点东西,首先在昨天的基础上,我用了一个QList来存放我们自定义Button,这里其实是有坑的,在后面增加其他控件的时候就会触发,到时在想办法解决。

​ 所以在初始化按钮的时候,我会顺便吧这些按钮按照一定顺序装到这个QList中,什么顺序呢,我这里定义了一个索引的枚举,如下。同样这个枚举内容也是会随着后期模块增多而增加。

enum AirConditionerIndex
{

    AC_auto = 0,
    AC_ac,
    AC_maxAC,
    AC_cycle,
    AC_aqs,
    AC_dual,
    AC_rear,
    AC_ion,




    AC_Count
};
    ### 2.1 按钮初始化代码
void MFD_AirConditioner::initMyPushButtons()
{
    m_buttonList.clear();

    ui->myPushButton_auto->setText("AUTO");
    m_buttonList.append(ui->myPushButton_auto);

    ui->myPushButton_ac->setText("AC");
    m_buttonList.append(ui->myPushButton_ac);

    ui->myPushButton_maxAC->setText("MAX A/C");
    m_buttonList.append(ui->myPushButton_maxAC);

    ui->myPushButton_cycle->setPicText(":/AirConditioner/Resources/MultifunctionDisplay/AirConditioner/AirConditionerPushButton/cycle.png",
                                       ":/AirConditioner/Resources/MultifunctionDisplay/AirConditioner/AirConditionerPushButton/cycle_1.png");
    m_buttonList.append(ui->myPushButton_cycle);

    ui->myPushButton_aqs->setText("AQS");
    m_buttonList.append(ui->myPushButton_aqs);

    ui->myPushButton_dual->setText("DUAL");
    m_buttonList.append(ui->myPushButton_dual);


    ui->myPushButton_rear->setText("REAR");
    m_buttonList.append(ui->myPushButton_rear);

    ui->myPushButton_rear->setICON(":/AirConditioner/Resources/MultifunctionDisplay/AirConditioner/AirConditionerPushButton/lock.png");

    ui->myPushButton_ion->setText("ION");
    m_buttonList.append(ui->myPushButton_ion);

}

image-20220502234619420

2.2 旋钮处理代码

void MFD_AirConditioner::inputControlDialValue(int value)
{
    if(value>0)
    {
        if(m_SelectIndex< AirConditionerIndex::AC_Count-1)
            m_SelectIndex++;
        else
            m_SelectIndex = 0;
    }
    else
    {
        if(m_SelectIndex > 0)
            m_SelectIndex--;
        else
            m_SelectIndex = AirConditionerIndex::AC_Count-1;
    }

    updateSelect();
}

2.3 按钮状态控制代码

​ 这里也就体现了使用QList的好处了,不然这里的代码,得长又长了。·

void MFD_AirConditioner::updateSelect()
{
    QListIterator<MFD_AirConditioner_PushButon*> list(m_buttonList);
    while (list.hasNext()) {
        list.next()->selected(false);
    }
    m_buttonList[m_SelectIndex]->selected(true);
}

2.4 旋钮按键处理

​ 这里我暂时只使用了OK按钮,来模拟旋钮按下和松开,代码如下:

void MFD_AirConditioner::inputControButton(int index,int type)
{
    switch (index) {
    case 0:         // OK
        if(type)
        {
            if(m_SelectIndex>=0)
                m_buttonList[m_SelectIndex]->enter();
        }
        else
        {
            if(m_SelectIndex>=0)
                m_buttonList[m_SelectIndex]->releaseEnter();
        }
        break;
    case 1:         // Up

        break;
    case 2:         // Down

        break;
    case 3:         // Left

        break;
    case 4:         // Right

        break;
    default:
        break;
    }
}

☞第三阶段成果展示

​ 目前已完成液晶仪表三种模式的初步显示,小模块后期根据精力更新了,主要还得找美术来搞资源,自己能力不够。暂未跟新计划。展示如下:

[video(video-yznBr6e3-1648369267384)(type-bilibili)(url-https://player.bilibili.com/player.html?aid=679609061)(image-https://ucc.alicdn.com/images/user-upload-01/img_convert/4d157e1cb316b007a2cb9790cb2dbfde.png)(title-基于Qt的汽车仪表模拟 3.0)]

✈B站链接:https://www.bilibili.com/video/BV1WS4y137y1/


☞第二阶段成果展示

​ 目前以完成HUD界面及接口开发,液晶仪表舒适模式和运动模式的开发。视频展示如下:

[video(video-2AqJ88TY-1645273728489)(type-bilibili)(url-https://player.bilibili.com/player.html?aid=594179292)(image-https://ucc.alicdn.com/images/user-upload-01/img_convert/e75563c3ce68bc980547dde8f6e265ba.png)(title-基于Qt的汽车仪表模拟 2.0)]

✈B站链接:https://www.bilibili.com/video/BV1aq4y1t7H7/


☞第一阶段成果展示

​ 目前以完成HUD界面及接口开发,液晶仪表舒适模式开发。展示如下:

[video(video-ArCvRvBQ-1642664938100)(type-bilibili)(url-https://player.bilibili.com/player.html?aid=77197267)(image-https://ucc.alicdn.com/images/user-upload-01/img_convert/ccddd04e0cef191fd33d7f58d41adb24.png)(title-基于Qt的汽车仪表模拟 1.0))]

✈B站链接:https://www.bilibili.com/video/BV1qJ411X7Gs/


说明:

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

多媒体部分是来自吉利博瑞2017旗舰版界面所有权和解释权都归吉利汽车所有。

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

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

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

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


博客签名2021

相关文章
|
18天前
|
人工智能 JSON 供应链
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
LucianaiB分享零成本畅用JVS Claw教程(学生认证享7个月使用权),并开源GeoMind项目——将JVS改造为科研与产业地理情报可视化AI助手,支持飞书文档解析、地理编码与腾讯地图可视化,助力产业关系图谱构建。
23535 12
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
|
6天前
|
Shell API 开发工具
Claude Code 快速上手指南(新手友好版)
AI编程工具卷疯啦!Claude Code凭借任务驱动+终端原生的特性,成了开发者的效率搭子。本文从安装、登录、切换国产模型到常用命令,手把手带新手快速上手,全程避坑,30分钟独立用起来。
1770 10
|
3天前
|
人工智能 开发工具 iOS开发
Claude Code 新手完全上手指南:安装、国产模型配置与常用命令全解
Claude Code 是一款运行在终端环境中的 AI 编程助手,能够直接在命令行中完成代码生成、项目分析、文件修改、命令执行、Git 管理等开发全流程工作。它最大的特点是**任务驱动、终端原生、轻量高效、多模型兼容**,无需图形界面、不依赖 IDE 插件,能够深度融入开发者日常工作流。
1183 1
|
5天前
|
人工智能 JSON BI
DeepSeek V4-Pro 接入 Claude Code 完全实战:体验、测试与关键避坑指南
Claude Code 作为当前主流的 AI 编程辅助工具,凭借强大的代码理解、工程执行与自动化能力深受开发者喜爱,但原生模型的使用成本相对较高。为了在保持能力的同时进一步降低开销,不少开发者开始寻找兼容度高、价格更友好的替代模型。DeepSeek V4 系列的发布带来了新的选择,该系列包含 V4-Pro 与 V4-Flash 两款模型,并提供了与 Anthropic 完全兼容的 API 接口,理论上只需简单修改配置,即可让 Claude Code 无缝切换为 DeepSeek 引擎。
1254 0
|
12天前
|
人工智能 缓存 Shell
Claude Code 全攻略:命令大全 + 实战工作流(完整版)
Claude Code 是一款运行在终端环境下的 AI 编码助手,能够直接在项目目录中理解代码结构、编辑文件、执行命令、执行开发计划,并支持持久化记忆、上下文压缩、后台任务、多模型切换等专业能力。对于日常开发、项目维护、快速重构、代码审查等场景,它可以大幅减少手动操作、提升编码效率。本文从常用命令、界面模式、核心指令、记忆机制、图片处理、进阶工作流等维度完整说明,帮助开发者快速上手并稳定使用。
2797 4
|
3天前
|
人工智能 JSON BI
Claude Code 搭配 DeepSeek V4-Pro 完整测评:超越 Claude Sonnet 4.5,低成本高效能背后的真实表现
Claude Code 凭借强大的代码理解、工程执行与自动化任务能力,成为开发者广泛使用的 AI 编程工具。但原生模型的调用成本较高,长期高频使用会带来明显开销。DeepSeek V4 系列模型发布后,凭借优秀的代码能力与兼容 Anthropic 协议的 API 接口,成为替代原生模型的高性价比选择。本文完整记录将 Claude Code 对接 DeepSeek V4-Pro 的配置流程、真实任务测试效果、优势亮点与必须注意的使用限制,为开发者提供可直接落地的参考方案。
808 1
|
5天前
|
人工智能 Linux API
hermes agent 安装教程:安装优化 + 模型配置 + 工具启用指南
Hermes Agent 是 Nous Research 于 2026 年发布的开源自主进化 AI 智能体框架(MIT 协议,Python 编写)。它通过任务沉淀技能、持久化记忆、原生多工具集成与并行子智能体,实现“越用越强”。支持 Linux/macOS/WSL2,安装便捷,面向个人与企业的新一代私有化 AI 助手。

热门文章

最新文章