• Qt---day4---9.20


     qt完成时钟:

     头文件:

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

    测试文件:

    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. }

     思维导图

  • 相关阅读:
    【机器学习算法】聚类分析-2 聚类算法的分类,层次聚类算法的选择
    纳百川冲刺创业板上市:计划募资约8亿元,宁德时代为主要合作方
    蓝海创意云接受【看苏州】独家专访:助力苏州数字文化行业全方位发展
    Windows与网络基础-28-子网划分
    7、Tomcat & Servlet
    软考:中间件
    OCR基本原理
    Java手写选择排序和算法案例拓展
    【性能优化】MySQL索引失效的原因以及如何进行SQL优化
    D. Yet Another Sorting Problem
  • 原文地址:https://blog.csdn.net/yjh666jhy/article/details/133103386