HMI-13-[Qt 布局]:转速表

简介: 基于Qt的汽车仪表模拟

image.png

点此链接查看视频

程序体验地址:https://pan.baidu.com/s/1rQFZx5JIud8lWdjMHl0tpg


目前版本还没有成功把字体打包的程序中,为了更好的效果体验,请先安装文件中的两个字体


程序体验地址:https://pan.baidu.com/s/1rQFZx5JIud8lWdjMHl0tpg


目前版本还没有成功把字体打包的程序中,为了更好的效果体验,请先安装文件中的两个字体


效果图

image.png

今天的里面,中间的平均油耗是不包括的,平均油耗的实现被我划分到到了左迷你显现器中了。

转速表的对外接口

 

/**
     * @brief selfInspection
     * 转速表自检程序
     */
    void selfInspection();
    /**
     * @brief setTacho
     * @param tacho
     * 设置发动机转速0-8000 转速
     */
    void setTacho(int tacho = 0);
    /**
     * @brief setTemperature
     * @param temperatur
     * 设置温度
     */
    void setTemperature(int temperatur = 0);

最基本的初始化部分

Tachometer::Tachometer(QWidget *parent) :QWidget(parent),ui(new Ui::Tachometer)
{
    ui->setupUi(this);
    ui->label_mainback->setStyleSheet("QLabel{border-image:url(:/Comfort/Resources/MeterDisplay/Comfort/Tachometer/mainback.png);}");
    ui->label_flag_temperature->setStyleSheet("QLabel{border-image:url(:/Comfort/Resources/MeterDisplay/Comfort/Tachometer/temperature_r.png);}");
    ui->label_pointer->installEventFilter(this);
    ui->label_pointer_shade->installEventFilter(this);
    ui->label_pointer_temperature->installEventFilter(this);
    m_timerTachoSelfInspection = new QTimer(this);
    m_timerTemperatureSelfInspection = new QTimer(this);
    connect(m_timerTachoSelfInspection,&QTimer::timeout,this,&Tachometer::slot_timerTachoSelfInspection);
    connect(m_timerTemperatureSelfInspection,&QTimer::timeout,this,&Tachometer::slot_timerTempearutreSelfInspection);
    setTacho();
}

剩下的实现内容

 

void Tachometer::selfInspection()
{
    this->tachoSelfInspection();
    this->temperatureSelfInspection();
}
void Tachometer::setTacho(int tacho)
{
    currentTacho = tacho;
    m_Angle = currentTacho*0.03375-135;
    update();
}
void Tachometer::setTemperature(int temperatur)
{
    currentTemperature = temperatur;
    m_Temperature = temperatur;
    if(m_Temperature >75)
    {
        ui->label_flag_temperature->setStyleSheet("QLabel{border-image:url(:/Comfort/Resources/MeterDisplay/Comfort/Tachometer/temperature_r.png);}");
    }
    else
    {
        ui->label_flag_temperature->setStyleSheet("QLabel{border-image:url(:/Comfort/Resources/MeterDisplay/Comfort/Tachometer/temperature_w.png);}");
    }
    update();
}
void Tachometer::tachoSelfInspection()
{
    if(m_timerTachoSelfInspection)
    {
        m_timerTachoSelfInspection->start(10);
    }
}
void Tachometer::temperatureSelfInspection()
{
    if(m_timerTemperatureSelfInspection)
    {
        m_timerTemperatureSelfInspection->start(10);
        ui->label_flag_temperature->setStyleSheet("QLabel{border-image:url(:/Comfort/Resources/MeterDisplay/Comfort/Tachometer/temperature_r.png);}");
    }
}
bool Tachometer::eventFilter(QObject *watched, QEvent *event)
{
    if(watched == ui->label_pointer && event->type() == QEvent::Paint)
    {
        drawPonter(m_Angle);
    }
    if(watched == ui->label_pointer_shade && event->type() == QEvent::Paint)
    {
        drawPonterShade(m_Angle);
    }
    if(watched == ui->label_pointer_temperature && event->type() == QEvent::Paint)
    {
        drawTemperature(m_Temperature);
    }
    return QWidget::eventFilter(watched,event);
}
void Tachometer::drawPonter(int angle)
{
    m_shadeOpacity = currentTacho / 10000.0;
    QPainter painter(ui->label_pointer);
    painter.setRenderHint((QPainter::SmoothPixmapTransform));
    painter.setRenderHint(QPainter::HighQualityAntialiasing);
    painter.translate(304,303.5);
    painter.save();
    painter.rotate(angle);
    painter.drawPixmap(-304,-302,416,500,QPixmap(":/Comfort/Resources/MeterDisplay/Comfort/Tachometer/pointer.png"));
    painter.restore();
}
void Tachometer::drawPonterShade(int angle)
{
    QPainter painter(ui->label_pointer_shade);
    painter.setOpacity(m_shadeOpacity);
    painter.setRenderHint((QPainter::SmoothPixmapTransform));
    painter.setRenderHint(QPainter::HighQualityAntialiasing);
    painter.translate(304,303.5);
    painter.save();
    painter.rotate(angle);
    painter.drawPixmap(-304,-302,416,500,QPixmap(":/Comfort/Resources/MeterDisplay/Comfort/Tachometer/pointer_shade.png"));
    painter.restore();
}
void Tachometer::slot_timerTachoSelfInspection()
{
    if(m_flagTachoSelfInspection)
    {
        if(currentTacho>0)
        {
            currentTacho = currentTacho-80;
        }
        else
        {
            m_flagTachoSelfInspection = !m_flagTachoSelfInspection;
            m_timerTachoSelfInspection->stop();
            emit signalSelfInspectionfinished();
        }
    }
    else
    {
        if(currentTacho<8100)
        {
            currentTacho = currentTacho+80;
        }
        else
        {
            m_flagTachoSelfInspection = !m_flagTachoSelfInspection;
        }
    }
    setTacho(currentTacho);
}
void Tachometer::slot_timerTempearutreSelfInspection()
{
    if(m_flagTemperatireSelfInspection)
    {
        if(currentTemperature >0)
        {
            currentTemperature--;
        }
        else
        {
            m_flagTemperatireSelfInspection = !m_flagTemperatireSelfInspection;
            m_timerTemperatureSelfInspection->stop();
            emit signalSelfInspectionfinished();
            ui->label_flag_temperature->setStyleSheet("QLabel{border-image:url(:/Comfort/Resources/MeterDisplay/Comfort/Tachometer/temperature_w.png);}");
        }
    }
    else
    {
        if(currentTemperature <100)
        {
            currentTemperature++;
        }
        else
        {
            m_flagTemperatireSelfInspection = !m_flagTemperatireSelfInspection;
        }
    }
    setTemperature(currentTemperature);
}
void Tachometer::drawTemperature(int temperature)
{
    QPainter painter(ui->label_pointer_temperature);
    painter.setRenderHint((QPainter::SmoothPixmapTransform));
    painter.setRenderHint(QPainter::HighQualityAntialiasing);
    painter.translate(304,303.5);
    painter.setPen(QPen(Qt::white,6,Qt::SolidLine));
    painter.save();
    if(temperature<=25)
    {
        painter.drawArc(-304,-308,608,608,247*16,temperature*7);
    }
    else if(temperature>25 && temperature <= 50)
    {
        painter.drawArc(-304,-308,608,608,247*16,24*7);
        painter.drawArc(-304,-308,608,608,259*16,(temperature-25)*7);
    }
    else if(temperature>50 && temperature <= 75)
    {
        painter.drawArc(-304,-308,608,608,247*16,24*7);
        painter.drawArc(-304,-308,608,608,259*16,24*7);
        painter.drawArc(-304,-308,608,608,271*16,(temperature-50)*7);
    }
    else if(temperature>75 && temperature <= 90)
    {
        painter.drawArc(-304,-308,608,608,247*16,24*7);
        painter.drawArc(-304,-308,608,608,259*16,24*7);
        painter.drawArc(-304,-308,608,608,271*16,24*7);
        painter.drawArc(-304,-308,608,608,283*16,(temperature-75)*7);
    }
    else if(temperature>90 && temperature <= 100)
    {
        painter.drawArc(-304,-308,608,608,247*16,24*7);
        painter.drawArc(-304,-308,608,608,259*16,24*7);
        painter.drawArc(-304,-308,608,608,271*16,24*7);
        painter.drawArc(-304,-308,608,608,283*16,15*7);
        painter.setPen(QPen(Qt::red,6,Qt::SolidLine));
        painter.drawArc(-304,-308,608,608,290*16,(temperature-90)*7);
    }
    painter.restore();
}



image.png

目录
相关文章
|
6月前
Qt 布局管理之 堆栈窗体
Qt 布局管理之 堆栈窗体
70 5
|
6月前
Qt 布局管理之 停靠窗口QDockWidget
Qt 布局管理之 停靠窗口QDockWidget
165 0
|
6月前
Qt 布局管理之分割窗口
Qt 布局管理之分割窗口
87 0
|
3月前
【qt】 QGridLayout布局管理器怎么用?
【qt】 QGridLayout布局管理器怎么用?
139 0
|
3月前
【Qt 学习笔记】Qt常用控件 | 布局管理器 | 空白项Spacer
【Qt 学习笔记】Qt常用控件 | 布局管理器 | 空白项Spacer
154 2
|
3月前
【Qt 学习笔记】Qt常用控件 | 布局管理器 | 表单布局Form Layout
【Qt 学习笔记】Qt常用控件 | 布局管理器 | 表单布局Form Layout
80 2
|
3月前
【Qt 学习笔记】Qt常用控件 | 布局管理器 | 网格布局Grid Layout
【Qt 学习笔记】Qt常用控件 | 布局管理器 | 网格布局Grid Layout
315 2
|
3月前
【Qt 学习笔记】Qt常用控件 | 布局管理器 | 水平布局Horizontal Layout
【Qt 学习笔记】Qt常用控件 | 布局管理器 | 水平布局Horizontal Layout
202 2
|
3月前
【Qt 学习笔记】Qt常用控件 | 布局管理器 | 垂直布局Vertical Layout
【Qt 学习笔记】Qt常用控件 | 布局管理器 | 垂直布局Vertical Layout
279 2