• 2023年9月20日


    画个钟

    头文件:

    1. #ifndef WIDGET_H
    2. #define WIDGET_H
    3. #include
    4. #include
    5. #include
    6. #include
    7. #include
    8. #include
    9. #include
    10. #include
    11. QT_BEGIN_NAMESPACE
    12. namespace Ui { class Widget; }
    13. QT_END_NAMESPACE
    14. class Widget : public QWidget
    15. {
    16. Q_OBJECT
    17. public:
    18. Widget(QWidget *parent = nullptr);
    19. ~Widget();
    20. //重写绘制事件处理函数
    21. void paintEvent(QPaintEvent *event) override;
    22. int hour;
    23. int min;
    24. int sec;
    25. private:
    26. Ui::Widget *ui;
    27. QTimer *timer;
    28. int timer_id;
    29. private slots:
    30. void timeout_slot();
    31. };
    32. #endif // WIDGET_H

    .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::timeout_slot);
    10. timer->start(1000);
    11. }
    12. Widget::~Widget()
    13. {
    14. delete ui;
    15. }
    16. //绘制事件处理函数的定义
    17. void Widget::paintEvent(QPaintEvent *event)
    18. {
    19. //实例化一个画家
    20. QPainter painter(this);
    21. //实例化一个画笔
    22. QPen pen; //无参构造
    23. pen.setColor(QColor("black"));
    24. pen.setStyle(Qt::SolidLine); //设置线形
    25. pen.setWidth(5);
    26. painter.setPen(pen);
    27. //给画家偏移起始坐标点
    28. painter.translate(this->width()/2,this->height()/2);
    29. //画个圆
    30. painter.drawEllipse(QPoint(0,0),200,200);
    31. pen.setColor(QColor("black"));
    32. painter.setPen(pen);
    33. //画出时针间隔
    34. for(int i=1;i<13;i++)
    35. {
    36. painter.rotate(30);
    37. painter.drawLine(0,-200,0,-180);
    38. painter.drawText(-5,-160,QString("%0").arg(i));
    39. }
    40. //画出分钟间隔
    41. for(int i=0;i<60;i++)
    42. {
    43. painter.rotate(6);
    44. painter.drawLine(0,-200,0,-195);
    45. }
    46. //画出秒针
    47. painter.rotate(-90);
    48. painter.rotate(6*sec);
    49. painter.drawLine(0,0,120,0);
    50. //画出分针
    51. painter.rotate(-6*sec);
    52. painter.rotate(6*min+6*sec/60);
    53. painter.drawLine(0,0,90,0);
    54. //画出时针
    55. pen.setColor(QColor("red"));
    56. painter.setPen(pen);
    57. painter.rotate(-6*min-6*sec/60);
    58. painter.rotate(30*hour+6*min/12+6*sec/60/12);
    59. painter.drawLine(0,0,70,0);
    60. }
    61. void Widget::timeout_slot()
    62. {
    63. //获取当前时间
    64. QTime sys_t = QTime::currentTime();
    65. //转为字符串
    66. QString t = sys_t.toString("hh:mm:ss");
    67. //获取时分秒
    68. hour = sys_t.hour();
    69. min = sys_t.minute();
    70. sec = sys_t.second();
    71. //触发重绘
    72. update();
    73. //显示
    74. ui->label->setText(t);
    75. }

  • 相关阅读:
    P01 MySQL 8.0.30 安装
    举个栗子~Tableau 技巧(245):用辅助标识快速查看标靶图
    windows资源文件LoadCursor、LoadIcon、SetCursor、SetIcon、WM_SETCURSOR消息
    MySQL索引设计与选择
    Bytebase x Hacktoberfest 2023 黑客啤酒节开源挑战邀请
    Python pyenv install 下载安装慢(失败)完美解决
    3D格式转换工具HOOPS Exchange最全技术指南(三):4大功能特征与典型使用场景
    Ubuntu18中的连接网络图标恢复
    View的事件分发机制
    微服务化解决文库下载业务问题实践
  • 原文地址:https://blog.csdn.net/2201_75732711/article/details/133099567