Qt Qwdget 汽车仪表知识点拆解5 标题栏图标闪烁

先贴上效果图,注意,没有写逻辑,都是乱动的


看下最上面的部分,有一些仪表图标在闪烁,如果一个一个写,也是可以实现的,不过感觉要累死的节奏

这里我写了一个我自己的Label,完了把把这些QLabel提升为自己的

在我自己的Label中实现了图标的1Hz闪烁

上实现代码

.H文件中内容

 

#ifndef MQLABEL_H
#define MQLABEL_H

#include <QObject>
#include <QLabel>
#include <QTimer>
class MQlabel : public QLabel
{
    Q_OBJECT
public:
    explicit MQlabel(QWidget *parent = 0);

    void glitter(bool temp = false);
signals:

private slots:
    void timerout_glitter();

private:
    QTimer* timer;
};

#endif // MQLABEL_H

.CPP文件中内容

 

#include "mqlabel.h"

MQlabel::MQlabel(QWidget *parent) : QLabel(parent)
{
    timer = new QTimer();
    connect(timer,SIGNAL(timeout()),this,SLOT(timerout_glitter()));
}

void MQlabel::glitter(bool temp)
{
    if(temp)
    {
        timer->start(1000);
    }
    else
    {
        timer->stop();
    }
}

void MQlabel::timerout_glitter()
{
    if(this->isHidden())
    {
        this->show();
    }
    else
    {
        this->hide();
    }
}

这样,需要那个label闪烁的时候,就调用那个label的闪烁函数就好了

我在主程序中写了一个随机

 

oid Widget::slot_timerout_titlebar_glitter()
{
    int temp = rand()%7;
    switch (temp)
    {
    case 0:
        ui->label_titlebar_1->glitter(true);
        break;
    case 1:
        ui->label_titlebar_2->glitter(true);
        break;
    case 2:
        ui->label_titlebar_3->glitter(true);
        break;
    case 3:
        ui->label_titlebar_4->glitter(true);
        break;
    case 4:
        ui->label_titlebar_5->glitter(true);
        break;
    case 5:
        ui->label_titlebar_6->glitter(true);
        break;
    case 6:
        ui->label_titlebar_7->glitter(true);
        break;
    default:
        break;
    }
    int temp2 = rand()%7;
    switch (temp2)
    {
    case 0:
        ui->label_titlebar_1->glitter(false);
        break;
    case 1:
        ui->label_titlebar_2->glitter(false);
        break;
    case 2:
        ui->label_titlebar_3->glitter(false);
        break;
    case 3:
        ui->label_titlebar_4->glitter(false);
        break;
    case 4:
        ui->label_titlebar_5->glitter(false);
        break;
    case 5:
        ui->label_titlebar_6->glitter(false);
        break;
    case 6:
        ui->label_titlebar_7->glitter(false);
        break;
    default:
        break;
    }

}





posted @ 2017-01-06 17:04  DreamDog  阅读(240)  评论(0编辑  收藏  举报