HMI-34-【运动模式】实现运动模式的UI上电逻辑控制

173 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

头图

HMI-34-【运动模式】实现运动模式的UI上电逻辑控制

今天这界面上没有实际的增加,仅仅是实把运动模式UI上电控制逻辑实现了一下,其实到这个模块的时候,就会发现之前在写舒适模式的时候的一些问题了,有好内容可以抽象出来了,不用每次都实现一遍了。不过现在还比较懒,还是先以实现为主,和面的内容放在优化里面。废话不多说,开始搞事情。不过为了吸你们开下去,现在把目前进度放在了。

目前进度

本期进度展示中有问题,能发现问题的小伙伴有奖。


HMI-34-【运动模式】实现运动模式的UI上电逻辑控制目前进度搞一个自己定时器,不用QTimer实现动画第一阶段成果展示

关键字: HMIQTimer动画uiQt

搞一个自己定时器,不用QTimer

至于为什么不用QTimer,之前的博客中有写,使用Qt时间久的人也知道为啥不用哈。这里就不展开说了,仅仅是简单的搞一个线程,开定时发个数就可以满足目前功能。代码如下:

/**
 * @brief The MoveFrom_Sport class
 * 这个类的作用就是用来代替QTimer,至于为什么,多用用就QTimer就知道为什么了
 */
class MoveFrom_Sport : public QThread
{
    Q_OBJECT
public:
    /**
     * @brief run
     * 线程RUN函数,所有的线程操作都应该放在这里
     */
    virtual void run();
public:
    bool flagRun = true;
signals:
    /**
     * @brief signalNumberChanged
     * @param number
     * 线程触发信号,其实就是定时器功能
     */
    void signalNumberChanged(int number);
private:
    int m_number = 0;
};
void MoveFrom_Sport::run()
{
    while (flagRun)
    {
        emit signalNumberChanged(m_number);
        m_number++;
        if(m_number>100)
        {
            flagRun = false;
            m_number = 0;
        }
        msleep(5);
    }
}

实现动画

有了定时器了,那实现动画就很简单了,只是这个简单不简单,算错一点就废了,因为整个UI基本是按照像素来的,并不是自适应,所以对控件坐标及大小就要算明白了,直接看代码吧

void MD_Sport::slotShaoAll(int number)
{
    m_title->setGeometry(212,0.89*number-66,1456,66);
    if(m_title->y() >0)
    {
        m_title->show();
    }
    m_bottom->setGeometry(0,790-1.4*number,1920,70);
    if(m_bottom->y()<720)
    {
        m_bottom->show();
    }
​
    m_left->setGeometry(-491 +5.89*number,121,491,492);
    if(m_left->x()>-491)
    {
        m_left->show();
    }
​
    m_center->setGeometry((615+ (675/2.0 - 675.0/200.0*number)),(20+ (674/2 - 674/200.0*number)),6.75*number,6.74*number);
    if(m_center->width()>10)
    {
        m_center->show();
        if(m_center->width() == 675)
        {
​
​
            m_center->powerUpFinished();
        }
    }
​
    m_right->setGeometry(2380 - 10.34*number,137,460,516);
    if(m_right->x()< 1920)
    {
        m_right->show();
    }
​
​
    if(number == 100)
    {
        emit signalPowerUpfinished();
        m_lightControl->show();
    }
}

这里中心仪表没有出现的位置了,只能由小变大,但是有部分指针虽然我设置栅格布局,但是在中心仪表中有mini仪表是通过代码生成,生成的时候并没有给布局,也没有在中心仪表中留位置,这里就多高两个函数,到了一定阶段看,在显示mini仪表。

void MDS_Center::powerUp()
{
    centerDisplay->hide();
    ui->label_pointer->hide();
    ui->label_drawOil->hide();
    ui->label_drawWater->hide();
​
}
​
void MDS_Center::powerUpFinished()
{
    centerDisplay->show();
    ui->label_pointer->show();
    ui->label_drawOil->show();
    ui->label_drawWater->show();
}

ok了,今天就到这里了,下面将实现运动模式下的自检功能。期待吧n_n

第一阶段成果展示

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

[video(video-ArCvRvBQ-1642664938100)(type-bilibili)(url-player.bilibili.com/player.html…img-blog.csdnimg.cn/img_convert…全网最帅Qt开发吉利汽车仪表)]


说明:

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

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

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

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

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


博客签名2021