
class Clock1 : public QDialog
Clock1(QWidget *parent = nullptr);
virtual void timerEvent(QTimerEvent*);
virtual void paintEvent(QPaintEvent*);
void DrawScaleLine(QPainter&,int);
void DrawDialNumber(QPainter&,int);
void DrawHourPointer(QPainter&,int);
void DrawSecondPointer(QPainter&,int);
void DrawMinutePointer(QPainter&,int);
void DrawCircularRing1(QPainter&,int,int);
void DrawCircularRing2(QPainter&,int,int);
void DrawCircularRing3(QPainter&,int,int);
Clock1::Clock1(QWidget *parent)
Qt::WindowFlags flags= this->windowFlags();
setWindowFlags(flags&~Qt::WindowContextHelpButtonHint);
QPalette bgpal=palette();
bgpal.setColor(QPalette::Background,QColor(255,255,255));
QTime curr_time =QTime::currentTime();
second=curr_time.second();
minute=curr_time.minute()+second/60;
hour=curr_time.hour()+minute/60;
void Clock1::timerEvent(QTimerEvent*)
QTime curr_time=QTime::currentTime();
second=curr_time.second();
minute=curr_time.minute()+second/60;
hour=curr_time.hour()+minute/60;
void Clock1::paintEvent(QPaintEvent*)
int height=this->height();
painter.translate(width>>1,height>>1);
int radius=((width>height)?height:width)/2-30;
painter.setRenderHint(QPainter::Antialiasing, true);
painter.setPen(Qt::NoPen);
DrawCircularRing1(painter,radius,radius-4);
DrawCircularRing2(painter,radius-4,radius-20);
DrawCircularRing3(painter,radius-20,radius-25);
DrawScaleLine(painter,radius-35);
DrawDialNumber(painter,radius-70);
DrawHourPointer(painter,radius-150);
DrawMinutePointer(painter,radius-120);
DrawSecondPointer(painter,radius-100);
void Clock1::DrawCircularRing1(QPainter& painter,int radius1,int radius2)
outRing.addEllipse(-radius1,-radius1, 2*radius1,2*radius1);
inRing.addEllipse(-radius2,-radius2,2*radius2,2*radius2);
painter.setBrush(QColor(200,200,200));
painter.drawPath(outRing.subtracted(inRing));
void Clock1::DrawCircularRing2(QPainter& painter,int radius1,int radius2)
outRing.addEllipse(-radius1,-radius1, 2*radius1,2*radius1);
inRing.addEllipse(-radius2,-radius2,2*radius2,2*radius2);
painter.setBrush(QColor(235,235,235));
painter.drawPath(outRing.subtracted(inRing));
void Clock1::DrawCircularRing3(QPainter& painter,int radius1,int radius2)
outRing.addEllipse(-radius1,-radius1, 2*radius1,2*radius1);
inRing.addEllipse(-radius2,-radius2,2*radius2,2*radius2);
painter.setBrush(QColor(180,180,180));
painter.drawPath(outRing.subtracted(inRing));
void Clock1::DrawScaleLine(QPainter& painter,int radius)
painter.setBrush(QColor(100,100,100));
pointPath1.moveTo(-2,-2);
pointPath1.lineTo(-1,-4);
pointPath2.moveTo(-2,-2);
pointPath2.lineTo(-1,-4);
pointPath2.lineTo(-1,20);
point.setX(radius*qCos(((90-i*6)*M_PI)/180));
point.setY(radius*qSin(((90-i*6)*M_PI)/180));
painter.translate(point.x(),-point.y());
painter.drawPath(pointPath1);
painter.drawPath(pointPath2);
void Clock1::DrawDialNumber(QPainter& painter,int radius)
painter.setPen(QColor(100,100,100));
font.setFamily("SimHei");
point.setX(radius*qCos(((60-i*30)*M_PI)/180));
point.setY(radius*qSin(((60-i*30)*M_PI)/180));
painter.translate(point.x(),-point.y());
painter.drawText(-15, -15, 30, 30,Qt::AlignCenter,QString::number(i+1));
void Clock1::DrawHourPointer(QPainter& painter,int radius)
painter.setPen(Qt::NoPen);
pointPath.lineTo(1,-radius);
pointPath.lineTo(-1,-radius);
pointPath.arcTo(-10,0,20,20,180,180);
painter.setBrush(QColor(0,0,0,200));
painter.drawPath(pointPath);
void Clock1::DrawMinutePointer(QPainter& painter,int radius)
pointPath.lineTo(1,-radius);
pointPath.lineTo(-1,-radius);
pointPath.arcTo(-10,0,20,20,180,180);
painter.rotate(minute*6);
painter.setBrush(QColor(0,0,0,200));
painter.drawPath(pointPath);
void Clock1::DrawSecondPointer(QPainter& painter,int radius)
pointPath.lineTo(1,-radius);
pointPath.lineTo(-1,-radius);
pointPath.arcTo(-10,0,20,20,180,180);
inRing.addEllipse(-5,-5,10,10);
painter.rotate(second*6);
painter.setBrush(QColor(255,0,0,200));
painter.drawPath(pointPath.subtracted(inRing));