基于Qt开发的智能广告显示终端项目讲解——时钟模块(三)

时钟模块

思路:利用Qt中的paintEvent画出时钟再利用timerEvent使时钟走起来

1、初始化绘图工具、设置圆心、半径

//绘图工具
QPainter painter(this);
QPen pen = painter.pen();
pen.setColor(QColor(12,34,56));
pen.setWidth(5);
painter.setPen(pen);
//圆心
QPoint center(this->width()/2,this->height()/2);
//半径
int radius;
if(this->width() <= this->height())
{
    radius=this->width()/2-5;
}
else
{
    radius=this->height()/2-5;
}

2、绘制表盘

//画刻度
int end = radius-5;
int start = end-radius/10;
painter.translate(center);
for(int i=0; i<60; i++)
{
    if(i%5==0)
    {
        pen.setColor(QColor(255,34,56));
        pen.setWidth(radius*7/145);
        painter.setPen(pen);
        painter.rotate(6*i);
        painter.drawLine(0,-start+5, 0, -end);
        painter.rotate(-6*i);
    }else
    {
        pen.setColor(QColor(66,34,56));
        pen.setWidth(radius*5/145);
        painter.setPen(pen);
        painter.rotate(6*i);
        painter.drawLine(0,-start, 0, -end);
        painter.rotate(-6*i);
    }
}
painter.translate(-center.x(),-center.y());

painter.drawEllipse(center,radius,radius); //画外圆
painter.drawEllipse(center,3,3);//画圆心

3、根据时间分别画出时针、分针、秒针

double hr = _time.hour()*30+_time.minute()/60.0*30+_time.second()/3600.0*30;
double mr = _time.minute()*6+_time.second()/60.0*6;
double sr = _time.second()*6;

//把坐标系移动到圆心
painter.translate(center);
//画时针
pen.setColor(QColor(255,34,56));
pen.setWidth(radius*8/145);
pen.setCapStyle(Qt::RoundCap);
painter.setPen(pen);
painter.rotate(hr);
painter.drawLine(0,0, 0,-radius/3);
painter.rotate(-hr);

//画分针
pen.setColor(QColor(12,255,56));
pen.setWidth(radius*6/145);
painter.setPen(pen);
painter.rotate(mr);
painter.drawLine(0,0, 0,-radius/2);
painter.rotate(-mr);

//画秒针
pen.setColor(QColor(12,34,255));
pen.setWidth(radius*4/145);
painter.setPen(pen);
painter.rotate(sr);
painter.drawLine(0,0, 0,-radius*2/3);
painter.rotate(-sr);

//画圆心
pen.setColor(QColor(12,34,56));
pen.setWidth(radius*6/145);
painter.setPen(pen);
painter.drawEllipse(QPoint(0,0),5,5);//画圆心
painter.translate(-center.x(),-center.y());

4、提供一个函数用来设置绘制的时间

void TimeClockWidget::setTime(const QTime &time)
{
    _time = time;
    update();
}

5、按照秒数每秒加一使秒针一秒一跳

void TimeClockWidget::timerEvent(QTimerEvent *event)
{
    _time = _time.addSecs(1);
    setTime(_time);
    ui->timeLb->setText(_time.toString());
}

这样一个随时间走动的时钟就写好了,今天给大家讲解了时钟模块的源码解析,接下来我会继续更新整个项目的详细讲解,感兴趣的小伙伴可以点波关注互相学习交流(大佬勿喷)不方便在C站下载源码的小伙伴可以私聊我哦

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值