Qt实现时钟

继续学习《Qt实战一二三》@博主一去丶二三里

想实现下绘制时钟。

https://blog.csdn.net/liang19890820/article/details/52064169

在把博主这篇文章理解之后,自己重新写了一遍,知识要变成自己的才有用。

现在总结一下我的思路吧。

第一步,是要用QTimer,因为时钟是按每秒刷新,所以要创建一个一秒计时器来跟踪当前时间。

第二步,就是用QPainter来绘制时钟,包括时针、分针、秒针的位置(QPoint),形状(drawConvexPolygon)、颜色(QColor),表盘(小时线、分钟线 setPen()),中心(坐标系原点默认是在左上角,需平移至中心 translate)等

第三步,加上小时对应的文本(就是表盘上1-12小时),包括,获取文本区域(QRectF)、绘制文本(drawText)

第二步和第三步都是一个函数,

以下是几个自己曾疑惑的地方

//QPainter 绘制
void MainWindow::paintEvent(QPaintEvent *event)
{
  Q_UNUSED(event);
   ……
}
//获取小时对应的文本区域
QRectF MainWindow::TextRectF(double radius,int PointSize,double angle)
{

}

所以需要在mainwindow.h文件中添加,否则会报错

protected:   
 void paintEvent(QPaintEvent *event);   
 QRectF TextRectF(double radius,int PointSize,double angle);

在绘制小时线、分钟线和小时对应的文本时,要用到for循环,例如

for(int i=0;i<12;i++){
}

用++i 和i++都试过了,都不影响结果。

第三步中要用到qCos、qSin,所以要在头文件中包含#include <qmath.h>,就不会报错了。

 painter.setPen(Qt::NoPen); //表示设置为无边框

还有一点,在设置时分秒针的颜色时,例如:

 QColor hourColor(200,110,0,150);    
QColor minuteColor(0,127,127,150);    
QColor secondColor(120,160,230,0);

四个参数分别表示R、G、B、Alpha。 Alpha是指该色彩值透明度,当设置为0时,为全透明。所以如果按照上述设置,得到的是如下结果:

看起来首先就感觉没动,其次没有秒针。其实等秒针转一圈,分针是会动的。原因就在于秒针的Alpha分量设置为0 了。

把秒针颜色设置改成

QColor secondColor(0,110,230,120);

得到结果就OK啦!

 

 

 

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值