• 华清 Qt day4 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. 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
    29. /********************************************************************/
    30. #include "widget.h"
    31. #include "ui_widget.h"
    32. Widget::Widget(QWidget *parent)
    33. : QWidget(parent)
    34. , ui(new Ui::Widget)
    35. {
    36. ui->setupUi(this);
    37. this->setFixedSize(600,600);
    38. QTimer *timer = new QTimer(this);
    39. connect(timer,&QTimer::timeout,this,&Widget::updateTime);
    40. timer->start(1000);
    41. this->setStyleSheet("background-color:white;");
    42. }
    43. Widget::~Widget()
    44. {
    45. delete ui;
    46. }
    47. void Widget::paintEvent(QPaintEvent *event)
    48. {
    49. Q_UNUSED(event);
    50. //实例化一个画家
    51. QPainter painter(this);
    52. //设置绘图器(QPainter)的渲染提示,开启抗锯齿效果
    53. painter.setRenderHint(QPainter::Antialiasing);
    54. //获取当前时间
    55. QTime currentTime = QTime::currentTime();
    56. int X=this->width()/2;
    57. int Y=this->height()/2;
    58. int radius=200;
    59. //绘制表盘
    60. painter.setPen(QPen(Qt::black,7)); //设置笔
    61. if(dial.isNull())
    62. {
    63. dial.load("D:\\huaqin_c++\\qt\\day4\\biaopan.png");
    64. }
    65. if(!dial.isNull())
    66. {
    67. painter.drawPixmap(X-radius,Y-radius,radius*2,radius*2,dial);
    68. }
    69. //绘制时针
    70. painter.save(); // 保存当前的绘制状态
    71. painter.translate(X,Y); // 将绘制的坐标原点移动到表盘的中心
    72. int hour = currentTime.hour(); // 获取当前的小时
    73. int minute = currentTime.minute(); // 获取当前的分钟
    74. double hourAngle = (hour%12 + minute/60.0)*30.0; // 计算时针的角度,考虑分钟对时针的影响
    75. painter.rotate(hourAngle); // 旋转坐标系,使时针指向正确的位置
    76. painter.setPen(QPen(Qt::black,5)); //设置笔
    77. painter.drawLine(0,0,0,-radius*0.5); // 绘制时针,起点是坐标原点 (0, 0),终点是时针的末端位置
    78. painter.restore(); // 恢复之前保存的绘制状态,以便后续绘制
    79. /***********************************下面同理******************************/
    80. //绘制分针
    81. painter.save();
    82. painter.translate(X,Y);
    83. double minuteAngle = minute*6.0;
    84. painter.rotate(minuteAngle);
    85. painter.setPen(QPen(Qt::red,3)); //设置笔
    86. painter.drawLine(0,0,0,-radius*0.7);
    87. painter.restore();
    88. //绘制秒针
    89. painter.save();
    90. painter.translate(X,Y);
    91. int second = currentTime.second();
    92. double secondAngle = second * 6.0;
    93. painter.rotate(secondAngle);
    94. painter.setPen(QPen(Qt::blue,2)); //设置笔
    95. painter.drawLine(0,0,0,-radius*0.9);
    96. painter.restore();
    97. }
    98. void Widget::updateTime()
    99. {
    100. update();
    101. }

    QT - day3 - GitMind

    在线思维导图 - GitMind

     

  • 相关阅读:
    Java牛客网社区项目——知识点&面试题
    Linux-安装MySQL
    IP-guard Web系统远程命令执行漏洞说明
    java8 Stream字段排序sorted()
    刘畊宏男孩女孩看过来!运动数据分析挖掘!⛵
    力扣每日一题-第25天-495.提莫攻击
    Docker数据集与自定义镜像:构建高效容器的关键要素
    JCMSuite应用-高功率半导体激光器
    调整COSWriter解决X-easypdf / PDFBOX生成大量数据时OOM问题
    一次基于Fastjson的JNDI注入
  • 原文地址:https://blog.csdn.net/Huxiao1220/article/details/133100797