• QT-day4作业


    头文件

    1. #ifndef WIDGET_H
    2. #define WIDGET_H
    3. #include
    4. #include //绘制事件类
    5. #include //画家类
    6. #include
    7. #include
    8. #include
    9. #include
    10. QT_BEGIN_NAMESPACE
    11. namespace Ui { class Widget; }
    12. QT_END_NAMESPACE
    13. class Widget : public QWidget
    14. {
    15. Q_OBJECT
    16. public:
    17. Widget(QWidget *parent = nullptr);
    18. ~Widget();
    19. //重写绘制事件处理函数
    20. void paintEvent(QPaintEvent *event) override;
    21. private slots:
    22. void updateTime();
    23. private:
    24. Ui::Widget *ui;
    25. QTimer *timer;
    26. QPixmap dial;
    27. };
    28. #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->setFixedSize(600,600);
    9. QTimer *timer = new QTimer(this);
    10. connect(timer,&QTimer::timeout,this,&Widget::updateTime);
    11. timer->start(1000);
    12. this->setStyleSheet("background-color:white;");
    13. }
    14. Widget::~Widget()
    15. {
    16. delete ui;
    17. }
    18. //绘制事件处理函数的定义
    19. void Widget::paintEvent(QPaintEvent *event)
    20. {
    21. Q_UNUSED(event);
    22. //实例化一个画家
    23. QPainter painter(this);
    24. //设置绘图器(QPainter)的渲染提示,开启抗锯齿效果
    25. painter.setRenderHint(QPainter::Antialiasing);
    26. //获取当前时间
    27. QTime currentTime = QTime::currentTime();
    28. int X=this->width()/2;
    29. int Y=this->height()/2;
    30. int radius=200;
    31. //画个圆
    32. painter.drawEllipse(QPoint(this->width()/2,this->height()/2),200,200);
    33. painter.setBrush(QBrush(QColor("skyblue"))); //给画家设置画刷
    34. //绘制表盘
    35. painter.setPen(QPen(Qt::black,7)); //设置笔
    36. if(dial.isNull())
    37. {
    38. dial.load("C:\\Users\\m\\Desktop\\123.jpg");
    39. }
    40. if(!dial.isNull())
    41. {
    42. painter.drawPixmap(X-radius,Y-radius,radius*2,radius*2,dial);
    43. }
    44. /******************************************************************/
    45. //绘制时针
    46. painter.save(); // 保存当前的绘制状态
    47. painter.translate(X,Y);
    48. int hour = currentTime.hour(); // 获取当前的小时
    49. int minute = currentTime.minute(); // 获取当前的分钟
    50. double hourAngle = (hour%12 + minute/60.0)*30.0; // 计算时针的角度,考虑分钟对时针的影响
    51. painter.rotate(hourAngle); // 旋转坐标系,使时针指向正确的位置
    52. painter.setPen(QPen(Qt::black,5)); //设置笔
    53. painter.drawLine(0,0,0,-radius*0.5); // 绘制时针,起点是坐标原点 (0, 0),终点是时针的末端位置
    54. painter.restore(); // 恢复之前保存的绘制状态,以便后续绘制
    55. //绘制分针
    56. painter.save();
    57. painter.translate(X,Y);
    58. double minuteAngle = minute*6.0;
    59. painter.rotate(minuteAngle);
    60. painter.setPen(QPen(Qt::red,3)); //设置笔
    61. painter.drawLine(0,0,0,-radius*0.7);
    62. painter.restore();
    63. //绘制秒针
    64. painter.save();
    65. painter.translate(X,Y);
    66. int second = currentTime.second();
    67. double secondAngle = second * 6.0;
    68. painter.rotate(secondAngle);
    69. painter.setPen(QPen(Qt::blue,2)); //设置笔
    70. painter.drawLine(0,0,0,-radius*0.9);
    71. painter.restore();
    72. }
    73. void Widget::updateTime()
    74. {
    75. update();
    76. }

  • 相关阅读:
    Redis最快速入门,一篇搞定(超详细)
    StrPool.C_COLON 和 StringPool.COLON 的拼接问题,踩坑了
    Excel VBA编程
    DC电源模块的使用寿命问题
    Coursera自然语言处理专项课程04:Natural Language Processing with Attention Models笔记 Week02
    最新AI智能问答系统源码/AI绘画系统源码/支持GPT联网提问/Prompt应用+支持国内AI提问模型
    备战数学建模1——MATLAB矩阵相关
    理想汽车×OceanBase:当造车新势力遇上数据库新势力
    【BOOST C++ 5 】通信(01 Boot.Asio )
    WPF依赖属性和附加属性快速理解
  • 原文地址:https://blog.csdn.net/2301_77616453/article/details/133102001