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


}

效果图:
Qt简易时钟

相关文章: