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; } }