时钟模块
思路:利用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站下载源码的小伙伴可以私聊我哦

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/29898.html