• 9月20日作业


    时钟代码:

    widget.h

    1. #ifndef WIDGET_H
    2. #define WIDGET_H
    3. #include
    4. #include
    5. #include
    6. #include
    7. #include
    8. #include
    9. QT_BEGIN_NAMESPACE
    10. namespace Ui { class Widget; }
    11. QT_END_NAMESPACE
    12. class Widget : public QWidget
    13. {
    14. Q_OBJECT
    15. public:
    16. Widget(QWidget *parent = nullptr);
    17. ~Widget();
    18. public slots:
    19. void paintEvent(QPaintEvent *event) override;
    20. void myupdate();
    21. private:
    22. Ui::Widget *ui;
    23. //定义一个计时器
    24. QTimer *timer;
    25. };
    26. #endif // WIDGET_H

    widget.cpp:

    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. timer = new QTimer(this);
    9. connect(timer, &QTimer::timeout, this, &Widget::myupdate);
    10. timer->start(1000);
    11. }
    12. Widget::~Widget()
    13. {
    14. delete ui;
    15. }
    16. void Widget::paintEvent(QPaintEvent *event)
    17. {
    18. qDebug()<<"paintEvent执行";
    19. QTime nowtime = QTime::currentTime();
    20. int hour = nowtime.hour();
    21. int minute = nowtime.minute();
    22. int second = nowtime.second();
    23. //定义一个画家类
    24. QPainter painter(this);
    25. //实例化一个画笔
    26. QPen pen; //使用无参构造
    27. pen.setColor(QColor("blue"));
    28. pen.setWidth(10);
    29. //将画笔给画家安排上
    30. painter.setPen(pen);
    31. //给画家偏移起始坐标点
    32. painter.translate(this->width()/2, this->height()/2);
    33. //画个圆
    34. painter.drawEllipse(QPoint(0,0), 200,200);
    35. pen.setWidth(2);
    36. painter.setPen(pen);
    37. //12刻度实现
    38. for(int i=1; i<=12; i++){
    39. painter.drawLine(180, 0, 200, 0);
    40. painter.rotate(360/12);
    41. }
    42. //60刻度实现
    43. painter.save();
    44. for(int i=1; i<=60; i++){
    45. painter.drawLine(190, 0, 200, 0);
    46. painter.rotate(360/60);
    47. }
    48. //数字实现
    49. for(int i=12; i>=1; i--){
    50. painter.drawText(QPoint(0, -160), QString::number(i));
    51. painter.rotate(-360/12);
    52. }
    53. painter.restore();
    54. //给画家 偏移坐标系
    55. painter.save();
    56. painter.rotate((hour-12)%12*360/12+180); //旋转坐标系
    57. qDebug()<<(hour-12)%12/12*360+180;
    58. pen.setColor(QColor("red"));
    59. pen.setWidth(10);
    60. painter.setPen(pen);
    61. //画个直线 时针
    62. painter.drawLine(0, 0, 0, 100);
    63. //给画家 偏移坐标系
    64. painter.restore();
    65. painter.save();
    66. painter.rotate(minute*360/60+second/60+180); //旋转坐标系
    67. pen.setColor(QColor("yellow"));
    68. pen.setWidth(5);
    69. painter.setPen(pen);
    70. painter.translate(0, 0);
    71. //画个直线 分针
    72. painter.drawLine(0, 0, 0, 125);
    73. //给画家 偏移坐标系
    74. painter.restore();
    75. painter.save();
    76. painter.rotate(second*360/60+180); //旋转坐标系
    77. pen.setColor(QColor("pick"));
    78. pen.setWidth(2);
    79. painter.setPen(pen);
    80. //画个直线 秒针
    81. painter.drawLine(0, 0, 0, 150);
    82. }
    83. void Widget::myupdate()
    84. {
    85. update();
    86. }

    运行截图:

    思维导图

  • 相关阅读:
    c++ 后台小练习--基于Vue的在线记事本
    JS基础数据类型及判断
    信息收集笔记(一)
    【Redis系列】缓存击穿、穿透、雪崩解决方案详解
    半导体可靠性测试方法都有哪些?
    c++设计模式之一创建型模式
    gateway基本配置
    使用“Apple 诊断”测试你的 Mac(查看电池是否到达更换标准)
    python自动开发,基础——1
    设计模式之适配器模式
  • 原文地址:https://blog.csdn.net/mcslll/article/details/133103186