#include "digiclock.h" #include "gutil/qgui.h" #include #include DigiClock::DigiClock(QString prefix, const QJsonObject &layer, QWidget *parent) : QWidget{parent} { timeZone = QTimeZone(layer["timezone"].toString().toUtf8()); auto spaceWidth = layer["spaceWidth"].toDouble(); auto pics = layer["arrayPics"].toArray(); foreach(QJsonValue pic, pics) imgs.insert(pic["name"].toString(), QPixmap(prefix+pic["id"].toString())); int dateStyle = layer["dateStyle"].toInt(); isSingleMonth = dateStyle==1||dateStyle==2||dateStyle==4||dateStyle==6||dateStyle==8||dateStyle==10||dateStyle==12; QPixmap& timeSep = imgs["maohao"]; weekly = layer["weekly"].toBool(); bool hour12 = layer["hour12"].toBool(); bool AmPm = hour12 ? layer["AmPm"].toBool() : false; timeptn = hour12 ? "hhmmssa" : "HHmmss"; bool hour = layer["hour"].toBool(); bool min = layer["min"].toBool(); bool sec = layer["sec"].toBool(); multiline = layer["multiline"].toBool(); if(multiline) { QVBoxLayout *vBox = new QVBoxLayout(this); vBox->setAlignment(Qt::AlignCenter); vBox->setContentsMargins(0,0,0,0); vBox->setSpacing(0); vBox->addStretch(); QHBoxLayout *hBox = new QHBoxLayout(); vBox->addLayout(hBox); hBox->addStretch(); addDate(dateStyle, layer, hBox); hBox->addStretch(); if(weekly) { hBox = new QHBoxLayout(); vBox->addLayout(hBox); hBox->addStretch(); hBox->addWidget((QWidget*)weekComp); hBox->addStretch(); } hBox = new QHBoxLayout(); vBox->addLayout(hBox); hBox->addStretch(); if(AmPm) { hBox->addWidget((QWidget*)ampmComp); hBox->addSpacing(spaceWidth); } if(hour) { hBox->addWidget((QWidget*)hourComps[0]); hBox->addWidget((QWidget*)hourComps[1]); } if(hour&&min) hBox->addWidget((QWidget*)new ImgWgt(timeSep)); if(min) { hBox->addWidget((QWidget*)minComps[0]); hBox->addWidget((QWidget*)minComps[1]); } if(min&&sec) hBox->addWidget((QWidget*)new ImgWgt(timeSep)); if(sec) { hBox->addWidget((QWidget*)secComps[0]); hBox->addWidget((QWidget*)secComps[1]); } hBox->addStretch(); vBox->addStretch(); } else { QHBoxLayout *hBox = new QHBoxLayout(this); hBox->setContentsMargins(0,0,0,0); hBox->setSpacing(0); hBox->addStretch(); addDate(dateStyle, layer, hBox); if(hBox->count()>1) hBox->addSpacing(spaceWidth*2); if(weekly) { hBox->addWidget((QWidget*)weekComp); hBox->addSpacing(spaceWidth*2); } if(AmPm) { hBox->addWidget((QWidget*)ampmComp); hBox->addSpacing(spaceWidth); } if(hour) { hBox->addWidget((QWidget*)hourComps[0]); hBox->addWidget((QWidget*)hourComps[1]); } if(hour&&min) hBox->addWidget((QWidget*)new ImgWgt(timeSep)); if(min) { hBox->addWidget((QWidget*)minComps[0]); hBox->addWidget((QWidget*)minComps[1]); } if(min&&sec) hBox->addWidget((QWidget*)new ImgWgt(timeSep)); if(sec) { hBox->addWidget((QWidget*)secComps[0]); hBox->addWidget((QWidget*)secComps[1]); } hBox->addStretch(); } } void DigiClock::addDate(int dateStyle, QJsonObject layer, QHBoxLayout* tar) { if(dateStyle==0 || dateStyle==1) { addYear(layer, tar, imgs["YEAR"]); if(layer["month"].toBool()) { tar->addWidget((QWidget*)monthComps[0]); tar->addWidget((QWidget*)monthComps[1]); tar->addWidget((QWidget*)new ImgWgt(imgs["MONTH"])); } if(layer["day"].toBool()) { tar->addWidget((QWidget*)dayComps[0]); tar->addWidget((QWidget*)dayComps[1]); tar->addWidget((QWidget*)new ImgWgt(imgs["DAY"])); } } else if(dateStyle==2 || dateStyle==3) { QPixmap sep = imgs["xiegang"]; if(layer["month"].toBool()) { tar->addWidget((QWidget*)monthComps[0]); tar->addWidget((QWidget*)monthComps[1]); tar->addWidget((QWidget*)new ImgWgt(sep)); } if(layer["day"].toBool()) { tar->addWidget((QWidget*)dayComps[0]); tar->addWidget((QWidget*)dayComps[1]); tar->addWidget((QWidget*)new ImgWgt(sep)); } addYear(layer, tar, QPixmap()); } else if(dateStyle==4 || dateStyle==5) { QPixmap sep = imgs["xiegang"]; if(layer["day"].toBool()) { tar->addWidget((QWidget*)dayComps[0]); tar->addWidget((QWidget*)dayComps[1]); tar->addWidget((QWidget*)new ImgWgt(sep)); } if(layer["month"].toBool()) { tar->addWidget((QWidget*)monthComps[0]); tar->addWidget((QWidget*)monthComps[1]); tar->addWidget((QWidget*)new ImgWgt(sep)); } addYear(layer, tar, QPixmap()); } else if(dateStyle==6 || dateStyle==7) { QPixmap sep = imgs["xiegang"]; addYear(layer, tar, sep); if(layer["month"].toBool()) { tar->addWidget((QWidget*)monthComps[0]); tar->addWidget((QWidget*)monthComps[1]); tar->addWidget((QWidget*)new ImgWgt(sep)); } if(layer["day"].toBool()) { tar->addWidget((QWidget*)dayComps[0]); tar->addWidget((QWidget*)dayComps[1]); } } else if(dateStyle==8 || dateStyle==9) { QPixmap sep = imgs["hengxian"]; if(layer["month"].toBool()) { tar->addWidget((QWidget*)monthComps[0]); tar->addWidget((QWidget*)monthComps[1]); tar->addWidget((QWidget*)new ImgWgt(sep)); } if(layer["day"].toBool()) { tar->addWidget((QWidget*)dayComps[0]); tar->addWidget((QWidget*)dayComps[1]); tar->addWidget((QWidget*)new ImgWgt(sep)); } addYear(layer, tar, QPixmap()); } else if(dateStyle==10 || dateStyle==11) { QPixmap sep = imgs["hengxian"]; if(layer["day"].toBool()) { tar->addWidget((QWidget*)dayComps[0]); tar->addWidget((QWidget*)dayComps[1]); tar->addWidget((QWidget*)new ImgWgt(sep)); } if(layer["month"].toBool()) { tar->addWidget((QWidget*)monthComps[0]); tar->addWidget((QWidget*)monthComps[1]); tar->addWidget((QWidget*)new ImgWgt(sep)); } addYear(layer, tar, QPixmap()); } else if(dateStyle==12 || dateStyle==13) { QPixmap sep = imgs["hengxian"]; addYear(layer, tar, sep); if(layer["month"].toBool()) { tar->addWidget((QWidget*)monthComps[0]); tar->addWidget((QWidget*)monthComps[1]); tar->addWidget((QWidget*)new ImgWgt(sep)); } if(layer["day"].toBool()) { tar->addWidget((QWidget*)dayComps[0]); tar->addWidget((QWidget*)dayComps[1]); } } } void DigiClock::addYear(QJsonObject layer, QHBoxLayout* tar, QPixmap sep) { if(layer["year"].toBool()) { if(layer["fullYear"].toBool()) { tar->addWidget((QWidget*)yearComps[0]); tar->addWidget((QWidget*)yearComps[1]); } tar->addWidget((QWidget*)yearComps[2]); tar->addWidget((QWidget*)yearComps[3]); if(!sep.isNull()) tar->addWidget((QWidget*)new ImgWgt(sep)); } } void DigiClock::cal() { QDateTime dt = QDateTime::currentDateTime().toTimeZone(timeZone); QTime time = dt.time(); QString hms = time.toString(timeptn); *ampmComp = imgs[time.hour()<12?"AM":"PM"]; *hourComps[0] = imgs[hms.mid(0,1)]; *hourComps[1] = imgs[hms.mid(1,1)]; *minComps[0] = imgs[hms.mid(2,1)]; *minComps[1] = imgs[hms.mid(3,1)]; *secComps[0] = imgs[hms.mid(4,1)]; *secComps[1] = imgs[hms.mid(5,1)]; if(yearComps[0]->img.isNull() || (time.hour()==0 && time.second()==0)) { QDate date = dt.date(); if(weekly) *weekComp = imgs[weeks[date.dayOfWeek()-1]]; QString ymd = date.toString("yyyyMMdd"); *yearComps[0] = imgs[ymd.mid(0,1)]; *yearComps[1] = imgs[ymd.mid(1,1)]; *yearComps[2] = imgs[ymd.mid(2,1)]; *yearComps[3] = imgs[ymd.mid(3,1)]; QChar ch = ymd.at(4); if(isSingleMonth && ch=='0') *monthComps[0] = QPixmap(); else *monthComps[0] = imgs[ymd.mid(4,1)]; *monthComps[1] = imgs[ymd.mid(5,1)]; *dayComps[0] = imgs[ymd.mid(6,1)]; *dayComps[1] = imgs[ymd.mid(7,1)]; } } void DigiClock::showEvent(QShowEvent *) { if(timerId==0) { timerId = startTimer(1000, Qt::PreciseTimer); cal(); } } void DigiClock::timerEvent(QTimerEvent *) { if(isVisible()) { cal(); update(); } else if(timerId!=0) { killTimer(timerId); timerId = 0; } }