【Qt开发1】Qt钟表的简单实现

Qt钟表的简单实现

先上效果图
【Qt开发1】Qt钟表的简单实现_第1张图片
一.钟表实现原理
设置定时器timer,每隔1000毫秒(即1s)发送timeout()信号到槽函数update(),重绘事件函数paintEvent(QPaintEvent*event)

	QTimer*timer=new QTimer(this);
    timer->start(1000);
    connect(timer,SIGNAL(timeout()),this,SLOT(update()));

二.钟表的绘制
拆分钟表:表盘 数字 刻度线 指针

paintEvent(QPaintEvent*event)
1.表盘

    painter.setPen(QPen(Qt::white,5,Qt::DashLine,Qt::RoundCap));
    painter.drawEllipse(50,90,500,500);

2.十二个数字

int r=250;
    for (int i=1;i<=12;i++) {
            painter.drawText(287+r*0.77*sin(2*PI/12*i),355-r*0.77*cos(2*PI/12*i),QString::number(i));

    }

注意:要注意界面x,y轴的正方向
(如果用旋转坐标轴的方法实现数字的位置,1-12的数字不能正向站立,不建议使用)

3.刻度线

    painter.translate(300,340);
    painter.save();
    //时段线
    for (int i=0;i<4;++i) {
        painter.drawLine(220,0,250,0);
        painter.rotate(90);
    }
    //小时线
    painter.setPen(QPen(Qt::white,3,Qt::DashLine,Qt::RoundCap));
    for (int i=0;i<12;++i) {
        painter.drawLine(230,0,250,0);
        painter.rotate(30);
    }
    painter.restore();

通过旋转坐标轴的方法绘制刻度线

4.指针
时针为例

//绘制针
   static QPoint hourhand[4]={
        QPoint(12,14),QPoint(0,25),QPoint(-12,14),QPoint(0,-100)};

确定针的点,再用 painter.drawConvexPolygon()函数绘制。

三.钟表转动实现
通过转动坐标轴,来实现即时绘制。
还是以时针转动为例。

   QTime time=QTime::currentTime();//获取当前系统时间
   painter.save();
   
   //时针转动
   painter.setPen(Qt::NoPen);
   painter.setBrush(QColor(240,140,40,150));
   painter.rotate(30*((time.hour()+time.minute()/60)));
   painter.drawConvexPolygon(hourhand,4);
   painter.restore();

这样一个简单的钟表就实现啦!~

若有不足欢迎大家多多指出,第一次写博客,内心有亿、、激动。

你可能感兴趣的:(Qt)