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 ,就不会报错了。

 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时,为全透明。所以如果按照上述设置,得到的是如下结果:

Qt实现时钟_第1张图片

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

把秒针颜色设置改成

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

得到结果就OK啦!

Qt实现时钟_第2张图片

 

 

 

你可能感兴趣的:(Qt)