运行截图如下(时针,分针,秒针都可以动的哦):

代码如下:

Widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>namespace Ui {
class Widget;
}class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();protected:void paintEvent(QPaintEvent *)override;void resizeEvent(QResizeEvent *event)override;void mouseMoveEvent(QMouseEvent *event)override;void mousePressEvent(QMouseEvent *event)override;void mouseReleaseEvent(QMouseEvent *event)override;
private:Ui::Widget *ui;bool m_dragging;QPoint m_startPosition;QPoint m_framePosition;
};#endif // WIDGET_H

Widget.cpp

#include "widget.h"
#include "ui_widget.h"#include <QPainter>
#include <QTime>
#include <QMouseEvent>
#include <QTImer>Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);QTimer *timer=new QTimer(this);connect(timer,SIGNAL(timeout()),this,SLOT(update()));timer->start(1000);m_dragging = false;
}Widget::~Widget()
{delete ui;
}void Widget::paintEvent(QPaintEvent *){QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);painter.translate(width()/2,height()/2);int side=qMin(width(),height());painter.scale(side/200.0,side/200.0);QPen pen(Qt::black,4);painter.setPen(pen);QBrush brush(QColor(247,238,214,80));painter.setBrush(brush);painter.drawEllipse(QPointF(0,0),98,98);painter.setPen(Qt::white);painter.drawEllipse(QPointF(0,0),100,100);QTime time=QTime::currentTime();painter.setPen(Qt::NoPen);painter.setBrush(Qt::black);painter.save();painter.rotate(30.0 * ((time.hour() + time.minute() / 60.0)));static const QPoint hourHand[3] = {QPoint(2, 0),QPoint(-2, 0),QPoint(0, -60)};painter.drawConvexPolygon(hourHand, 3);painter.restore();static const QPoint minuteHand[3] = {QPoint(2, 0),QPoint(-2, 0),QPoint(0, -95)};static const QPoint secondHand[3]={QPoint(2,0),QPoint(-2,0),QPoint(0,-105)};painter.save();painter.rotate(6.0 * (time.minute() + time.second() /60.0));painter.drawConvexPolygon(minuteHand, 3);painter.restore();painter.save();painter.rotate(6.0 * time.second());painter.drawConvexPolygon(minuteHand, 3);painter.restore();painter.save();painter.setPen(Qt::black);painter.setBrush(Qt::lightGray);painter.drawEllipse(QPointF(0, 0), 2, 2);painter.drawPoint(0, 0);painter.restore();painter.setPen(Qt::black);for (int i = 0; i < 12; ++i) {painter.drawLine(90, 0, 96, 0);painter.rotate(30.0);}for (int j = 0; j < 60; ++j) {if ((j % 5) != 0)painter.drawLine(95, 0, 96, 0);painter.rotate(6.0);}
}void Widget::mousePressEvent(QMouseEvent *event){if(event->button()==Qt::LeftButton){m_dragging=true;m_startPosition=event->globalPos();m_framePosition=frameGeometry().topLeft();}QWidget::mousePressEvent(event);
}void Widget::mouseMoveEvent(QMouseEvent *event){if(event->buttons()&Qt::LeftButton){if(m_dragging){QPoint delta=event->globalPos()-m_startPosition;move(m_framePosition+delta);}}QWidget::mouseMoveEvent(event);
}void Widget::resizeEvent(QResizeEvent *event){int side = qMin(width(), height());QRegion maskedRegion(width() / 2 - side / 2, height() /2 - side / 2, side, side, QRegion::Ellipse);setMask(maskedRegion);
}void Widget::mouseReleaseEvent(QMouseEvent *event){m_dragging=false;QWidget::mouseReleaseEvent(event);
}

main.cpp

#include "widget.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}

Qt学习笔记-自绘时钟相关推荐

  1. QT学习笔记(摘抄)

    QT学习笔记-1.QT主要的对象 说来惭愧学习c++很长时间了一直没有使用c++开发过软件界面 所以现在想认认真真的学习一个c++图形界面框架库 本来想学习Xwidget但是这个资料不大好找 有啥问题 ...

  2. Qt学习笔记,Qt国际化

    Qt学习笔记,Qt国际化 Qt国际化步骤: 第一步:设置.pro文件,加入TRANSLATIONS为国际化做准备 TRANSLATIONS = language/language_en.ts\     ...

  3. Qt学习笔记,Qt程序架构设计要旨

    Qt学习笔记,Qt程序架构设计要旨 时间过得很快,转眼学习Qt已经有一个多月了,对Qt的学习也在不断的深入中.自己手下的code也很多了,不过不得不说,还有很多的部分没有接触过,比如网络编程,2D,3 ...

  4. Qt学习笔记之MySQL数据库

    一.MySQL概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQ ...

  5. Qt学习笔记之数据库

    一.数据库简介 1.1.数据和数据库(DB) 用计算机进行数据处理,首先就要把信息以数据形式存储到计算机中,故数据是可以被计算机接受和处理的符号.根据所表示的信息特征不同,数据有不同的类别,如数字.文 ...

  6. Qt学习笔记之文件处理

    Qt提供了通用的文件处理类QFile和处理文本的QTextStream类和处理二进制数据的QDataStream类,这些流操作极大地方便了对文件的督促存储.对文件信息和目录进行操作的类是QfileIn ...

  7. Qt学习笔记之国际化

    国际化的英文表述为Internationalization,通常简写为I18N(首尾字母加中间的字符数),一个应用程序的国际化就是使该应用程序可以让其他国家的用户使用的过程. 1. 相关的Qt类和AP ...

  8. Qt学习笔记之 字符串类型小结

    1. Qt常用字符串类型 1.1 QString QString是Unicode编码的字符串,存储一系列16位的QChar,每一个QChar对应一个Unicode 4.0编码的字符,详见<Qt学 ...

  9. Qt学习笔记,再次分析EVA源码之后得出的结论-QListView,QListViewItem(Qt3);Q3ListView,Q3ListViewItem(Qt4)...

    Qt学习笔记,再次分析EVA源码之后得出的结论-QListView,QListViewItem(Qt3);Q3ListView,Q3ListViewItem(Qt4) 今天再次分析了Eva的源码,也看 ...

最新文章

  1. 22张深度学习精炼图笔记总结
  2. OpenCV-Python,计算机视觉开发利器
  3. Android程序员的技术要求和学习路线
  4. lucene .doc文件格式解析——见图
  5. shell变量加单引号sql_关于shell:在Bash中的命令中扩展变量的单引号
  6. Python中的元类(metaclass)
  7. MySQL修改用户(RENAME USER)
  8. go语言基础到提高(5)-结构
  9. rabbit MQ 的环境及命令使用(一)
  10. powershell 查看系统设备\device status
  11. 高质量壁纸网站,满足壁纸控的所有想象!
  12. 打工人的健康修炼记:2021卷里求生(附报告下载)
  13. Python 3.5/3.6 windows 7 安装
  14. 仓储系统流程图_有效的仓储物流管理的6个重要提示
  15. window.postMessage
  16. 114.maven+springmvc+spring+mybaties 项目整合
  17. 也来对比一下segmentfault、开源中国、简书
  18. 软件的接口设计图_软件产品研发流程
  19. Qt实现窗口跳转(类似于看图软件中下一张和上一张)
  20. Sentaurus TCAD模型创建、激活电极等

热门文章

  1. Python爬虫实践: 获取百度贴吧内容
  2. 我们家的HTML5捣蛋王开始行动了
  3. 网络通信程序写起来很难专业课没问题
  4. 飞鸽传书确保服务数据的安全可靠
  5. 即时通讯软件在企业里的应用及发展
  6. 10W 赞的程序员高薪职业建议
  7. React 系列之 怎么学最快速有效
  8. mysql 排序1.1.1_mysql中字符串1.1/1.2/1.2.2/1.2.5排序问题
  9. 寄存器分配图着色_【02】从零开始的卡通渲染-着色篇1
  10. Science发布基因组比对革新技术:泛基因组学映射工具Giraffe