• 9.20号作业实现钟表


    1.widget.h

    1. #include //画家
    2. #include
    3. #include
    4. #include //定时器类
    5. QT_BEGIN_NAMESPACE
    6. namespace Ui { class Widget; }
    7. QT_END_NAMESPACE
    8. class Widget : public QWidget
    9. {
    10. Q_OBJECT
    11. public:
    12. Widget(QWidget *parent = nullptr);
    13. ~Widget();
    14. void paintEvent(QPaintEvent *event) override;
    15. //定时器处理函数
    16. void timerEvent(QTimerEvent *e) override;
    17. private:
    18. Ui::Widget *ui;
    19. int timer_id;
    20. };
    21. #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_id = this->startTimer(1000);
    9. }
    10. Widget::~Widget()
    11. {
    12. delete ui;
    13. }
    14. void Widget::paintEvent(QPaintEvent *event)
    15. {
    16. // static int num=1;
    17. //qDebug()<<num++;
    18. QPainter painter(this);
    19. //
    20. QPen pen;
    21. pen.setColor(QColor("blue"));
    22. pen.setStyle(Qt::SolidLine);
    23. pen.setWidth(5);
    24. //
    25. painter.setPen(pen);
    26. //
    27. painter.translate(this->width()/2,this->height()/2);
    28. //设置画刷和偏移坐标系
    29. painter.rotate(0);
    30. painter.setBrush(QBrush(QColor("skyblue")));
    31. //画个圆
    32. painter.drawEllipse(QPoint(0,0),100,100);
    33. for(int i=0;i<360;i+=30)
    34. {
    35. painter.rotate(30);
    36. painter.drawLine(QPoint(0,-100),QPoint(0,-90));
    37. }
    38. for(int i=0;i<360;i+=6)
    39. {
    40. painter.rotate(6);
    41. painter.drawLine(QPoint(0,-100),QPoint(0,-95));
    42. }
    43. //绘制时针
    44. painter.save(); // 保存当前的绘制状态
    45. // 将绘制的坐标原点移动到表盘的中心
    46. int h=ui->label->text().toInt(); // 获取当前的小时
    47. int m=ui->label_2->text().toInt(); // 获取当前的分钟
    48. double hourAngle = (h%12 + m/60.0)*30.0; // 计算时针的角度,考虑分钟对时针的影响
    49. painter.rotate(hourAngle); // 旋转坐标系,使时针指向正确的位置
    50. painter.setPen(QPen(Qt::black,5)); //设置笔
    51. painter.drawLine(QPoint(0,0),QPoint(0,-30)); // 绘制时针,起点是坐标原点 (0, 0),终点是时针的末端位置
    52. painter.restore(); // 恢复之前保存的绘制状态,以便后续绘制
    53. //绘制分针
    54. painter.save();
    55. double minuteAngle = m*6.0;
    56. painter.rotate(minuteAngle);
    57. painter.setPen(QPen(Qt::red,3)); //设置笔
    58. painter.drawLine(QPoint(0,0),QPoint(0,-50));
    59. painter.restore();
    60. //绘制秒针
    61. painter.save();
    62. int s=ui->label_3->text().toInt();
    63. double secondAngle = s * 6.0;
    64. painter.rotate(secondAngle);
    65. painter.setPen(QPen(Qt::blue,2)); //设置笔
    66. painter.drawLine(QPoint(0,0),QPoint(0,-70));
    67. painter.restore();
    68. this->update();
    69. }
    70. void Widget::timerEvent(QTimerEvent *e)
    71. {
    72. if(e->timerId()==timer_id)
    73. {
    74. QTime sys_t=QTime::currentTime();
    75. QString h=sys_t.toString("hh");
    76. QString m=sys_t.toString("mm");
    77. QString s=sys_t.toString("ss");
    78. ui->label->setText(h);
    79. ui->label_2->setText(m);
    80. ui->label_3->setText(s);
    81. }
    82. }

    main.cpp

    1. #include "widget.h"
    2. #include
    3. int main(int argc, char *argv[])
    4. {
    5. QApplication a(argc, argv);
    6. Widget w;
    7. w.show();
    8. return a.exec();
    9. }

  • 相关阅读:
    AI变现之数字人工具库账号引流
    网络安全(黑客)技术自学
    纠正一下网上文章所说“利用RPC绕过CFG”的错误说法
    微信公众号分销商城源码系统+多元商家+收银台 带完整的搭建教程
    【Python学习笔记】Python近期总结
    湖北移动中兴B860AV2.1_S905L_线刷固件包
    网易数帆陈谔:低代码平台,应对企业应用开发复杂性的一剂良方
    【计算机毕业设计】1.房屋租赁系统
    【线程】多线程安全
    Groovy(第九节) Groovy 之单元测试
  • 原文地址:https://blog.csdn.net/weixin_56612097/article/details/133107149