void Widget::paintEvent(QPaintEvent *){
float hh,mm,ss;
QString h,m,s;
//获取系统时间
QDateTime current_date_time =QDateTime::currentDateTime();
h = current_date_time.toString("hh");
m = current_date_time.toString("mm");
s = current_date_time.toString("ss");
//将时间转换为度数,这里实现了分针和时针的微动
ss = 6*s.toFloat()-90;
mm = 6*(m.toFloat()+s.toFloat()/60)-90;
hh = 30*(h.toFloat()+(m.toFloat()+s.toFloat()/60)/60)-90;
int side = qMin(width(),height());
QPen pen;
QPainter painter(this);
QTransform transform;
//抗锯齿
painter.setRenderHint(QPainter::Antialiasing);
transform.translate(width()/2,height()/2);
transform.scale(side/300.0,side/300.0);
painter.setWorldTransform(transform);
pen.setWidth(2);//设置线的粗度
painter.setPen(pen);
painter.drawEllipse(QPointF(0, 0),149,149);//画圆
for(int i = 1;i<=60;i++){//画刻度
transform.rotate(6);
painter.setWorldTransform(transform);
if(i%5==0){
painter.drawLine(120,0,149,0);
}else{
painter.drawLine(140,0,149,0);
}
}
transform.reset();//重置
transform.translate(width()/2,height()/2);
transform.scale(side/300.0,side/300.0);
transform.rotate(hh);
painter.setWorldTransform(transform);
pen.setWidth(5);
painter.setPen(pen);
painter.drawLine(0,0,70,0);
transform.reset();
transform.translate(width()/2,height()/2);
transform.scale(side/300.0,side/300.0);
transform.rotate(mm);
painter.setWorldTransform(transform);
pen.setWidth(4);
painter.setPen(pen);
painter.drawLine(0,0,120,0);
transform.reset();
transform.translate(width()/2,height()/2);
transform.scale(side/300.0,side/300.0);
transform.rotate(ss);
painter.setWorldTransform(transform);
pen.setWidth(3);
painter.setPen(pen);
painter.drawLine(0,0,135,0);
}
效果图: