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

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

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

这里我写了一个我自己的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;
} }

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

05-11 18:18