QT 绘制简易时钟

打印 上一主题 下一主题

主题 665|帖子 665|积分 1995

头文件
  1. #ifndef WIDGET_H
  2. #define WIDGET_H
  3. #include <QWidget>
  4. #include <QPainter>
  5. #include <QTime>
  6. #include <QTimerEvent>
  7. #include <QDebug>
  8. QT_BEGIN_NAMESPACE
  9. namespace Ui { class Widget; }
  10. QT_END_NAMESPACE
  11. class Widget : public QWidget
  12. {
  13.     Q_OBJECT
  14. public:
  15.     Widget(QWidget *parent = nullptr);
  16.     ~Widget();
  17.     void paintEvent(QPaintEvent *event) override;
  18. private:
  19.     Ui::Widget *ui;
  20.     //声明 事件处理函数 重载
  21.     void timerEvent(QTimerEvent *event) override;
  22. };
  23. #endif // WIDGET_H
复制代码
原文件
  1. #include "widget.h"
  2. #include "ui_widget.h"
  3. Widget::Widget(QWidget *parent)
  4.     : QWidget(parent)
  5.     , ui(new Ui::Widget)
  6. {
  7.     ui->setupUi(this);
  8.     this->startTimer(1000);
  9. }
  10. Widget::~Widget()
  11. {
  12.     delete ui;
  13. }
  14. //时钟底座
  15. void Widget::paintEvent(QPaintEvent *event)
  16. {   
  17.     QPainter painter(this);//实例化画家
  18.     QPen pen;//实例化笔
  19.     QFont font;//实例化字体
  20.     //画笔属性
  21.     pen.setWidth(5);
  22.     //字体属性
  23.     font.setFamily("楷体");
  24.     font.setPointSize(10);
  25.     //画家属性
  26.     painter.setPen(pen);
  27.     painter.setFont(font);
  28.     painter.translate(this->width()/2,this->height()/2);//画家坐标
  29.     //绘制圆
  30.     painter.drawEllipse(QPoint(0,0),300,300);
  31.     //绘制粗刻度
  32.     painter.rotate(-60);
  33.     for(int i = 0; i < 12; i++)
  34.     {
  35.         painter.drawLine(300,0,290,0);
  36.         painter.rotate(30);
  37.     }
  38.     //绘制细刻度
  39.     pen.setWidth(2);
  40.     painter.setPen(pen);
  41.     painter.rotate(-24);
  42.     for(int i = 0; i < 60 ; i++)
  43.     {
  44.         painter.drawLine(300,0,295,0);
  45.         painter.rotate(6);
  46.     }
  47.     //获取系统时间
  48.     QTime time = QTime::currentTime();
  49.     //绘制秒针
  50.     painter.setPen(pen);
  51.     painter.rotate(-6);
  52.     painter.rotate(6*time.second());
  53.     painter.drawLine(290,0,0,0);
  54.     painter.rotate(-6*time.second());
  55.     //绘制分针
  56.     pen.setWidth(10);
  57.     painter.setPen(pen);
  58.     painter.rotate(6*time.minute());
  59.     painter.drawLine(200,0,0,0);
  60.     painter.rotate(-6*time.minute());
  61.     //绘制时针
  62.     pen.setWidth(15);
  63.     painter.setPen(pen);
  64.     painter.rotate(30*time.hour());
  65.     painter.drawLine(100,0,0,0);
  66.     qDebug()<<time.hour()<<" "<<time.minute()<<" "<<time.second();
  67. }
  68. void Widget::timerEvent(QTimerEvent *event)
  69. {
  70.     this->update();
  71. }
复制代码
 



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

伤心客

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表