HMI-26- [HUD] HUD rewrite

Qt-based automotive instrument simulation

 

In fact, I wrote a separate HUD before the previous GC9 project, where resources directly to the original lane too, along the lines now want to re-engage once.

HUD Beijing is transparent, so you can really feel invested in glass. Interface HUD above the current drawn follows

 

/**
     * @brief fastStart
     * 快速启动
     */
    void fastStart();
    /**
     * @brief selfInspection
     * 自检程序
     */
    void selfInspection();
    /**
     * @brief powerUp
     * HUD上电操作
     */
    void powerUp();
    /**
     * @brief powerOff
     * HUD断电操作
     */
    void powerOff();
    /**
     * @brief setLaneKeeping
     * 设置车道保持
     */
    void setLaneKeeping(LaneKeep temp = m_LaneKeep_No);
    /**
     * @brief setCruiseControl
     * @param temp
     * 设置定速巡航
     */
    void setCruiseControl(bool temp);
    /**
     * @brief setSelfAdaptiveCruiseControl
     * @param temp
     * 设置自适应巡航
     */
    void setSelfAdaptiveCruiseControl(bool temp);

    /**
     * @brief setSelfAdaptiveCruiseControlDistance
     * @param temp
     * 设置距离
     */
    void setSelfAdaptiveCruiseControlDistance(int temp);
    /**
     * @brief setSelfAdaptiveCruiseControlModel
     * @param temp
     * 设置自适应巡航模式
     */
    void setSelfAdaptiveCruiseControlModel(SelfAdaptiveCruiseControlModel temp);
    /**
     * @brief setCarSpeed
     * @param temp
     * 设置车速
     */
    void setCarSpeed(int temp);
    /**
     * @brief setTurnLight
     * @param temp
     * 设置转向灯
     */
    void setTurnLight(int temp);
    /**
     * @brief setDirection
     * @param temp
     * 设置导航方向
     */
    void setDirection(Direction temp);
    /**
     * @brief setDirectionDistance
     * @param temp
     * 设置距离
     */
    void setDirectionDistance(int temp = 150);

Speed ​​digital meter display part codes are as follows

 

#ifndef HUD_NUMBER_H
#define HUD_NUMBER_H

#include <QWidget>
#include <QThread>
class HUDNumberThread :  public QThread
{
    Q_OBJECT
public:
    /**
     * @brief run
     * 重载线程函数
     */
    virtual void run();
signals:
     void signalTimeOut();

};

namespace Ui {
class HUD_Number;
}

class HUD_Number : public QWidget
{
    Q_OBJECT

public:
    explicit HUD_Number(QWidget *parent = nullptr);
    ~HUD_Number();
    /**
     * @brief set_Number
     * @param number
     * 设置车速
     */
    void setNumber(int number = 888);

    void selfInspection();
private:
    Ui::HUD_Number *ui;
    HUDNumberThread *m_hudNumber = nullptr;
};

#endif // HUD_NUMBER_H

#include "hud_number.h"
#include "ui_hud_number.h"

HUD_Number::HUD_Number(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::HUD_Number)
{
    ui->setupUi(this);
}

HUD_Number::~HUD_Number()
{
    delete ui;
}

void HUD_Number::setNumber(int number)
{
    if(number<10)
    {
        ui->label_N_B->hide();
        ui->label_N_S->hide();
        ui->label_N_G->show();
        ui->label_N_G->setGeometry(104,0,104,147);
        ui->label_N_KM->move(ui->label_N_G->x()+6,154);

        switch (number)
        {
        case 0:

            ui->label_N_G->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/0.png)");
            break;
        case 1:
            ui->label_N_G->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/1.png)");
            break;
        case 2:
            ui->label_N_G->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/2.png)");
            break;
        case 3:
            ui->label_N_G->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/3.png)");
            break;
        case 4:
            ui->label_N_G->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/4.png)");
            break;
        case 5:
            ui->label_N_G->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/5.png)");
            break;
        case 6:
            ui->label_N_G->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/6.png)");
            break;
        case 7:
            ui->label_N_G->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/7.png)");
            break;
        case 8:
            ui->label_N_G->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/8.png)");
            break;
        case 9:
            ui->label_N_G->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/9.png)");
            break;
        default:
            break;
        }
    }
    else if(number>=10 && number <100)
    {
        ui->label_N_B->hide();
        ui->label_N_S->show();
        ui->label_N_G->show();
        ui->label_N_S->setGeometry(52,0,104,147);
        ui->label_N_G->setGeometry(156,0,104,147);
        ui->label_N_KM->move(ui->label_N_G->x()+6,154);
        switch (number%10)
        {
        case 0:

            ui->label_N_G->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/0.png)");
            break;
        case 1:
            ui->label_N_G->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/1.png)");
            break;
        case 2:
            ui->label_N_G->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/2.png)");
            break;
        case 3:
            ui->label_N_G->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/3.png)");
            break;
        case 4:
            ui->label_N_G->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/4.png)");
            break;
        case 5:
            ui->label_N_G->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/5.png)");
            break;
        case 6:
            ui->label_N_G->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/6.png)");
            break;
        case 7:
            ui->label_N_G->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/7.png)");
            break;
        case 8:
            ui->label_N_G->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/8.png)");
            break;
        case 9:
            ui->label_N_G->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/9.png)");
            break;
        default:
            break;
        }
        switch (number/10)
        {
        case 0:

            ui->label_N_S->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/0.png)");
            break;
        case 1:
            ui->label_N_S->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/1.png)");
            break;
        case 2:
            ui->label_N_S->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/2.png)");
            break;
        case 3:
            ui->label_N_S->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/3.png)");
            break;
        case 4:
            ui->label_N_S->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/4.png)");
            break;
        case 5:
            ui->label_N_S->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/5.png)");
            break;
        case 6:
            ui->label_N_S->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/6.png)");
            break;
        case 7:
            ui->label_N_S->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/7.png)");
            break;
        case 8:
            ui->label_N_S->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/8.png)");
            break;
        case 9:
            ui->label_N_S->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/9.png)");
            break;
        default:
            break;
        }


    }
    else if(number>=100 && number < 1000)
    {
        ui->label_N_B->show();
        ui->label_N_S->show();
        ui->label_N_G->show();
        ui->label_N_B->setGeometry(0,0,104,147);
        ui->label_N_S->setGeometry(104,0,104,147);
        ui->label_N_G->setGeometry(208,0,104,147);
        ui->label_N_KM->move(ui->label_N_G->x()+6,154);
        switch (number%10)
        {
        case 0:

            ui->label_N_G->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/0.png)");
            break;
        case 1:
            ui->label_N_G->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/1.png)");
            break;
        case 2:
            ui->label_N_G->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/2.png)");
            break;
        case 3:
            ui->label_N_G->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/3.png)");
            break;
        case 4:
            ui->label_N_G->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/4.png)");
            break;
        case 5:
            ui->label_N_G->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/5.png)");
            break;
        case 6:
            ui->label_N_G->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/6.png)");
            break;
        case 7:
            ui->label_N_G->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/7.png)");
            break;
        case 8:
            ui->label_N_G->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/8.png)");
            break;
        case 9:
            ui->label_N_G->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/9.png)");
            break;
        default:
            break;
        }
        switch (number/10%10)
        {
        case 0:

            ui->label_N_S->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/0.png)");
            break;
        case 1:
            ui->label_N_S->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/1.png)");
            break;
        case 2:
            ui->label_N_S->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/2.png)");
            break;
        case 3:
            ui->label_N_S->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/3.png)");
            break;
        case 4:
            ui->label_N_S->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/4.png)");
            break;
        case 5:
            ui->label_N_S->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/5.png)");
            break;
        case 6:
            ui->label_N_S->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/6.png)");
            break;
        case 7:
            ui->label_N_S->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/7.png)");
            break;
        case 8:
            ui->label_N_S->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/8.png)");
            break;
        case 9:
            ui->label_N_S->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/9.png)");
            break;
        default:
            break;
        }
        switch (number/100)
        {
        case 0:

            ui->label_N_B->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/0.png)");
            break;
        case 1:
            ui->label_N_B->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/1.png)");
            break;
        case 2:
            ui->label_N_B->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/2.png)");
            break;
        case 3:
            ui->label_N_B->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/3.png)");
            break;
        case 4:
            ui->label_N_B->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/4.png)");
            break;
        case 5:
            ui->label_N_B->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/5.png)");
            break;
        case 6:
            ui->label_N_B->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/6.png)");
            break;
        case 7:
            ui->label_N_B->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/7.png)");
            break;
        case 8:
            ui->label_N_B->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/8.png)");
            break;
        case 9:
            ui->label_N_B->setStyleSheet("border-image:url(:/Number/Resources/Hud/Number/9.png)");
            break;
        default:
            break;
        }

    }
    else
    {

    }
}

void HUD_Number::selfInspection()
{
    setNumber();
    if(!m_hudNumber)
    {
        m_hudNumber = new HUDNumberThread();
        connect(m_hudNumber,&HUDNumberThread::signalTimeOut,this,[=](){setNumber(0);});
        m_hudNumber->start();
    }
}

void HUDNumberThread::run()
{
    msleep(3000);
    emit signalTimeOut();
}

Flasher codes are as follows

 

#ifndef HUD_TURNLIGHT_H
#define HUD_TURNLIGHT_H

#include <QWidget>
#include <QThread>
class HUDTurnLIghtThread :  public QThread
{
    Q_OBJECT
public:
    /**
     * @brief run
     * 重载线程函数
     */
    virtual void run();
signals:
     void signalTimeOut();

};
namespace Ui {
class HUD_TurnLight;
}

class HUD_TurnLight : public QWidget
{
    Q_OBJECT

public:
    explicit HUD_TurnLight(QWidget *parent = nullptr);
    ~HUD_TurnLight();

    /**
     * @brief selfInspection
     * 初始化
     */
    void selfInspection();
    /**
     * @brief setTurnLight
     * @param temp
     * 设置转向灯
     */
    void setTurnLight(int temp);
private:
    Ui::HUD_TurnLight *ui;

    HUDTurnLIghtThread *m_hudTurnLightThread = nullptr;

    QTimer *m_timerTurnLeft = nullptr;     //左转向灯定时器
    QTimer *m_timerTurnRight = nullptr;    //右转向灯定时器
};

#endif // HUD_TURNLIGHT_H

#include "hud_turnlight.h"
#include "ui_hud_turnlight.h"
#include <QTimer>
HUD_TurnLight::HUD_TurnLight(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::HUD_TurnLight)
{
    ui->setupUi(this);
    ui->label_turnLIght_L->hide();
    ui->label_turnLIght_L->hide();

    m_timerTurnLeft = new QTimer(this);
    m_timerTurnRight = new QTimer(this);

    connect(m_timerTurnLeft,&QTimer::timeout,this,[=](){
        if(ui->label_turnLIght_L->isHidden())
        {
            ui->label_turnLIght_L->show();
        }
        else
        {
            ui->label_turnLIght_L->hide();
        }
    });

    connect(m_timerTurnRight,&QTimer::timeout,this,[=](){
        if(ui->label_turnLIght_L->isHidden())
        {
            ui->label_turnLIght_L->show();
        }
        else
        {
            ui->label_turnLIght_L->hide();
        }
    });
}

HUD_TurnLight::~HUD_TurnLight()
{
    delete ui;
}

void HUD_TurnLight::selfInspection()
{
    ui->label_turnLIght_L->show();
    ui->label_turnLIght_R->show();
    if(!m_hudTurnLightThread)
    {
        m_hudTurnLightThread = new HUDTurnLIghtThread();
        connect(m_hudTurnLightThread,&HUDTurnLIghtThread::signalTimeOut,this,[=](){
            ui->label_turnLIght_L->hide();
            ui->label_turnLIght_R->hide();
        });
        m_hudTurnLightThread->start();
    }
}

void HUD_TurnLight::setTurnLight(int temp)
{
    switch (temp) {

    case 0:
    {
        if(m_timerTurnRight->isActive())
        {
            m_timerTurnRight->stop();
            ui->label_turnLIght_L->hide();
        }
        m_timerTurnLeft->start(1000);
        break;
    }
    case 1:
    {
        if(m_timerTurnLeft->isActive())
        {
            m_timerTurnLeft->stop();
            ui->label_turnLIght_L->hide();
        }
        m_timerTurnRight->start(1000);
        break;
    }

    case 2:
    {
        m_timerTurnLeft->start(1000);
        m_timerTurnRight->start(1000);
        break;
    }

    case 3:
    {
        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;
    }


    }
}

void HUDTurnLIghtThread::run()
{
    msleep(3000);
    emit signalTimeOut();
}

Navigation codes are as follows

 

#ifndef HUD_DIRECTION_H
#define HUD_DIRECTION_H

#include <QWidget>
#include <QThread>


enum Direction{
    m_straight,
    m_rightUp,
    m_right,
    m_rightDown,
    m_turnaround,
    m_leftDown,
    m_left,
    m_leftUp
};


class HUDDirectionThread :  public QThread
{
    Q_OBJECT
public:
    /**
     * @brief run
     * 重载线程函数
     */
    virtual void run();
signals:
     void signalTimeOut();

};

namespace Ui {
class HUD_Direction;
}

class HUD_Direction : public QWidget
{
    Q_OBJECT

public:
    explicit HUD_Direction(QWidget *parent = nullptr);
    ~HUD_Direction();
    /**
     * @brief setDirection
     * @param temp
     * 设置导航方向
     */
    void setDirection(Direction temp);
    /**
     * @brief setDirectionDistance
     * @param temp
     * 设置距离
     */
    void setDirectionDistance(int temp = 150);

    void selfInspection();

private:
    Ui::HUD_Direction *ui;
    HUDDirectionThread *m_hudDirectionThrerad = nullptr;
};

#endif // HUD_DIRECTION_H

#include "hud_direction.h"
#include "ui_hud_direction.h"

HUD_Direction::HUD_Direction(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::HUD_Direction)
{
    ui->setupUi(this);
    ui->label_up->hide();
    ui->label_left->hide();
    ui->label_leftUp->hide();
    ui->label_right->hide();
    ui->label_line_1->hide();
    ui->label_line_2->hide();
    ui->label_line_3->hide();
    ui->label_rightUp->hide();
    ui->label_leftDown->hide();
    ui->label_lineBase->hide();
    ui->label_rightDown->hide();
    ui->label_turnraound->hide();
    ui->label_pointer->hide();
    ui->label_base->hide();
//    setDirection(m_rightUp);
//    setDirectionDistance(110);
}

HUD_Direction::~HUD_Direction()
{
    delete ui;
}

void HUD_Direction::setDirection(Direction temp)
{
    switch (temp) {
    case m_straight:
    {
        ui->label_up->show();
        ui->label_left->hide();
        ui->label_leftUp->hide();
        ui->label_right->hide();
        ui->label_line_1->hide();
        ui->label_line_2->hide();
        ui->label_line_3->hide();
        ui->label_rightUp->hide();
        ui->label_leftDown->hide();
        ui->label_lineBase->hide();
        ui->label_rightDown->hide();
        ui->label_turnraound->hide();
        ui->label_pointer->show();
        ui->label_base->show();
        break;
    }
    case m_rightUp:
    {
        ui->label_up->hide();
        ui->label_left->hide();
        ui->label_leftUp->hide();
        ui->label_right->hide();
        ui->label_line_1->hide();
        ui->label_line_2->hide();
        ui->label_line_3->hide();
        ui->label_rightUp->show();
        ui->label_leftDown->hide();
        ui->label_lineBase->hide();
        ui->label_rightDown->hide();
        ui->label_turnraound->hide();
        ui->label_pointer->show();
        ui->label_base->show();
        break;
    }
    case m_right:
    {
        ui->label_up->hide();
        ui->label_left->hide();
        ui->label_leftUp->hide();
        ui->label_right->show();
        ui->label_line_1->hide();
        ui->label_line_2->hide();
        ui->label_line_3->hide();
        ui->label_rightUp->hide();
        ui->label_leftDown->hide();
        ui->label_lineBase->hide();
        ui->label_rightDown->hide();
        ui->label_turnraound->hide();
        ui->label_pointer->show();
        ui->label_base->show();
        break;
    }
    case m_rightDown:
    {
        ui->label_up->hide();
        ui->label_left->hide();
        ui->label_leftUp->hide();
        ui->label_right->hide();
        ui->label_line_1->hide();
        ui->label_line_2->hide();
        ui->label_line_3->hide();
        ui->label_rightUp->hide();
        ui->label_leftDown->hide();
        ui->label_lineBase->hide();
        ui->label_rightDown->show();
        ui->label_turnraound->hide();
        ui->label_pointer->show();
        ui->label_base->show();
        break;
    }
    case m_turnaround:
    {
        ui->label_up->hide();
        ui->label_left->hide();
        ui->label_leftUp->hide();
        ui->label_right->hide();
        ui->label_line_1->hide();
        ui->label_line_2->hide();
        ui->label_line_3->hide();
        ui->label_rightUp->hide();
        ui->label_leftDown->hide();
        ui->label_lineBase->hide();
        ui->label_rightDown->hide();
        ui->label_turnraound->show();
        ui->label_base->hide();
        ui->label_pointer->hide();
        break;
    }
    case m_leftDown:
    {
        ui->label_up->hide();
        ui->label_left->hide();
        ui->label_leftUp->hide();
        ui->label_right->hide();
        ui->label_line_1->hide();
        ui->label_line_2->hide();
        ui->label_line_3->hide();
        ui->label_rightUp->hide();
        ui->label_leftDown->show();
        ui->label_lineBase->hide();
        ui->label_rightDown->hide();
        ui->label_turnraound->hide();
        ui->label_pointer->show();
        ui->label_base->show();
        break;
    }
    case m_left:
    {
        ui->label_up->hide();
        ui->label_left->show();
        ui->label_leftUp->hide();
        ui->label_right->hide();
        ui->label_line_1->hide();
        ui->label_line_2->hide();
        ui->label_line_3->hide();
        ui->label_rightUp->hide();
        ui->label_leftDown->hide();
        ui->label_lineBase->hide();
        ui->label_rightDown->hide();
        ui->label_turnraound->hide();
        ui->label_pointer->show();
        ui->label_base->show();
        break;
    }
    case m_leftUp:
    {
        ui->label_up->hide();
        ui->label_left->hide();
        ui->label_leftUp->show();
        ui->label_right->hide();
        ui->label_line_1->hide();
        ui->label_line_2->hide();
        ui->label_line_3->hide();
        ui->label_rightUp->hide();
        ui->label_leftDown->hide();
        ui->label_lineBase->hide();
        ui->label_rightDown->hide();
        ui->label_turnraound->hide();
        ui->label_pointer->show();
        ui->label_base->show();
        break;
    }
    }
}

void HUD_Direction::setDirectionDistance(int temp)
{
    if(temp>100 && temp <= 150)
    {
        ui->label_line_1->show();
        ui->label_line_2->show();
        ui->label_line_3->show();
        ui->label_lineBase->show();
    }
    else if(temp <= 100 && temp >50)
    {
        ui->label_line_1->show();
        ui->label_line_2->show();
        ui->label_line_3->hide();
        ui->label_lineBase->show();
    }
    else if(temp <= 50 && temp >0)
    {
        ui->label_line_1->show();
        ui->label_line_2->hide();
        ui->label_line_3->hide();
        ui->label_lineBase->show();
    }
    else if(temp<= 0)
    {
        ui->label_line_1->hide();
        ui->label_line_2->hide();
        ui->label_line_3->hide();
        ui->label_lineBase->hide();
    }
}

void HUD_Direction::selfInspection()
{
    ui->label_up->show();
    ui->label_left->show();
    ui->label_leftUp->show();
    ui->label_right->show();
    ui->label_line_1->show();
    ui->label_line_2->show();
    ui->label_line_3->show();
    ui->label_rightUp->show();
    ui->label_leftDown->show();
    ui->label_lineBase->show();
    ui->label_rightDown->show();
    ui->label_turnraound->show();
    ui->label_pointer->show();
    ui->label_base->hide();

    if(!m_hudDirectionThrerad)
    {
        m_hudDirectionThrerad = new HUDDirectionThread();
        connect(m_hudDirectionThrerad,&HUDDirectionThread::signalTimeOut,this,[=](){
            ui->label_up->hide();
            ui->label_left->hide();
            ui->label_leftUp->hide();
            ui->label_right->hide();
            ui->label_line_1->hide();
            ui->label_line_2->hide();
            ui->label_line_3->hide();
            ui->label_rightUp->hide();
            ui->label_leftDown->hide();
            ui->label_lineBase->hide();
            ui->label_rightDown->hide();
            ui->label_turnraound->hide();
            ui->label_pointer->hide();
            ui->label_base->hide();
        });
        m_hudDirectionThrerad->start();
    }


}

void HUDDirectionThread::run()
{
    msleep(3000);
    emit signalTimeOut();
}

Cruise code is as follows

 

#ifndef HUD_CRUISE_H
#define HUD_CRUISE_H

#include <QWidget>
#include <QThread>

enum LaneKeep
{
    m_LaneKeep_No,
    m_LaneKeep_Left,
    m_LaneKeep_Right,
    m_LaneKeep_Double
};

enum SelfAdaptiveCruiseControlModel
{
    m_SelfAdaptiveCruiseControlModel_Near,
    m_SelfAdaptiveCruiseControlModel_Normal,
    m_SelfAdaptiveCruiseControlModel_Far
};

class HUDCruiseThread :  public QThread
{
    Q_OBJECT
public:
    /**
     * @brief run
     * 重载线程函数
     */
    virtual void run();
signals:
     void signalTimeOut();

};
namespace Ui {
class HUD_Cruise;
}

class HUD_Cruise : public QWidget
{
    Q_OBJECT

public:
    explicit HUD_Cruise(QWidget *parent = nullptr);
    ~HUD_Cruise();
    /**
     * @brief selfInspection
     * 自检函数
     */
    void selfInspection();
    /**
     * @brief setLaneKeeping
     * 设置车道保持
     */
    void setLaneKeeping(LaneKeep temp = m_LaneKeep_No);
    /**
     * @brief setCruiseControl
     * @param temp
     * 设置定速巡航
     */
    void setCruiseControl(bool temp);
    /**
     * @brief setSelfAdaptiveCruiseControl
     * @param temp
     * 设置自适应巡航
     */
    void setSelfAdaptiveCruiseControl(bool temp);
    /**
     * @brief setSelfAdaptiveCruiseControlDistance
     * @param temp
     * 设置距离
     */
    void setSelfAdaptiveCruiseControlDistance(int temp);
    /**
     * @brief setSelfAdaptiveCruiseControlModel
     * @param temp
     * 设置自适应巡航模式
     */
    void setSelfAdaptiveCruiseControlModel(SelfAdaptiveCruiseControlModel temp);

private:
    Ui::HUD_Cruise *ui;

    HUDCruiseThread *m_hudCruise = nullptr;

    int m_selfAdaptiveCruiseControl = 0;
};

#endif // HUD_CRUISE_H


#include "hud_cruise.h"
#include "ui_hud_cruise.h"

HUD_Cruise::HUD_Cruise(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::HUD_Cruise)
{
    ui->setupUi(this);
    ui->label_car->hide();
    ui->label_sel_1->hide();
    ui->label_sel_2->hide();
    ui->label_sel_3->hide();
    ui->label_speed->hide();
    ui->label_line_L->hide();
    ui->label_line_R->hide();
}

HUD_Cruise::~HUD_Cruise()
{
    delete ui;
}

void HUD_Cruise::selfInspection()
{
    ui->label_car->show();
    ui->label_sel_1->show();
    ui->label_sel_2->show();
    ui->label_sel_3->show();
    ui->label_speed->show();
    ui->label_line_L->show();
    ui->label_line_R->show();
    if(!m_hudCruise)
    {
        m_hudCruise = new HUDCruiseThread();
        connect(m_hudCruise,&HUDCruiseThread::signalTimeOut,this,[=](){
            ui->label_car->hide();
            ui->label_sel_1->hide();
            ui->label_sel_2->hide();
            ui->label_sel_3->hide();
            ui->label_speed->hide();
            ui->label_line_L->hide();
            ui->label_line_R->hide();
        });
        m_hudCruise->start();
    }
}

void HUD_Cruise::setLaneKeeping(LaneKeep temp)
{
    switch (temp){

    case m_LaneKeep_No:
    {
        ui->label_line_L->hide();
        ui->label_line_R->hide();
        break;
    }
    case m_LaneKeep_Left:
    {
        ui->label_line_L->show();
        ui->label_line_R->hide();
        break;
    }
    case m_LaneKeep_Right:
    {
        ui->label_line_L->hide();
        ui->label_line_R->show();
        break;
    }
    case m_LaneKeep_Double:
    {
        ui->label_line_L->show();
        ui->label_line_R->show();
        break;
    }

    }
}

void HUD_Cruise::setCruiseControl(bool temp)
{
    if(temp)
    {
        ui->label_speed->show();
    }
    else
    {
        ui->label_speed->hide();
    }
}

void HUD_Cruise::setSelfAdaptiveCruiseControl(bool temp)
{
    if(temp)
    {
        ui->label_car->show();
    }
    else
    {
        ui->label_car->hide();
    }
}

void HUD_Cruise::setSelfAdaptiveCruiseControlDistance(int temp)
{
    switch (m_selfAdaptiveCruiseControl)
    {
    case m_SelfAdaptiveCruiseControlModel_Near:
    {
        if(temp>0 && temp <= 10)
        {
            ui->label_sel_3->hide();
            ui->label_sel_2->hide();
            ui->label_sel_1->show();
        }
        else if(temp>10 && temp <= 30)
        {
            ui->label_sel_3->hide();
            ui->label_sel_2->show();
            ui->label_sel_1->show();
        }
        else if(temp>30 && temp <= 200)
        {
            ui->label_sel_3->show();
            ui->label_sel_2->show();
            ui->label_sel_1->show();
        }
        else
        {
            ui->label_sel_3->hide();
            ui->label_sel_2->hide();
            ui->label_sel_1->hide();
        }
        break;
    }
    case m_SelfAdaptiveCruiseControlModel_Normal:
    {
        if(temp>0 && temp <= 10)
        {
            ui->label_sel_3->hide();
            ui->label_sel_2->hide();
            ui->label_sel_1->show();
        }
        else if(temp>10 && temp <= 30)
        {
            ui->label_sel_3->hide();
            ui->label_sel_2->show();
            ui->label_sel_1->show();
        }
        else if(temp>30 && temp <= 200)
        {
            ui->label_sel_3->show();
            ui->label_sel_2->show();
            ui->label_sel_1->show();
        }
        else
        {
            ui->label_sel_3->hide();
            ui->label_sel_2->hide();
            ui->label_sel_1->hide();
        }
        break;
    }
    case m_SelfAdaptiveCruiseControlModel_Far:
    {
        if(temp>0 && temp <= 10)
        {
            ui->label_sel_3->hide();
            ui->label_sel_2->hide();
            ui->label_sel_1->show();
        }
        else if(temp>10 && temp <= 30)
        {
            ui->label_sel_3->hide();
            ui->label_sel_2->show();
            ui->label_sel_1->show();
        }
        else if(temp>30 && temp <= 200)
        {
            ui->label_sel_3->show();
            ui->label_sel_2->show();
            ui->label_sel_1->show();
        }
        else
        {
            ui->label_sel_3->hide();
            ui->label_sel_2->hide();
            ui->label_sel_1->hide();
        }
        break;
    }
    }
}

void HUD_Cruise::setSelfAdaptiveCruiseControlModel(SelfAdaptiveCruiseControlModel temp)
{
    m_selfAdaptiveCruiseControl = temp;
}

void HUDCruiseThread::run()
{
    msleep(3000);
    emit signalTimeOut();
}

These are the current HUD's implementation code

 

2019/11/18 20:30

 

 

Published 259 original articles · won praise 535 · views 540 000 +

Guess you like

Origin blog.csdn.net/z609932088/article/details/103130164