• QT 绘画功能的时钟


     .h

    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. #include
    12. QT_BEGIN_NAMESPACE
    13. namespace Ui { class Widget; }
    14. QT_END_NAMESPACE
    15. class Widget : public QWidget
    16. {
    17. Q_OBJECT
    18. public:
    19. Widget(QWidget *parent = nullptr);
    20. ~Widget();
    21. void paintEvent(QPaintEvent *event);
    22. void timerEvent(QTimerEvent *e);
    23. private slots:
    24. private:
    25. Ui::Widget *ui;
    26. int timer_id;
    27. //给定时器实例化一个对象
    28. QTimer * timer;
    29. int hh=0,mm=0,ss=0;
    30. };
    31. #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_id=this->startTimer(1000);
    9. //给定时器实例化对象
    10. timer=new QTimer(this);
    11. // 设置窗口的大小和标题
    12. setFixedSize(500, 500);
    13. setWindowTitle("闹钟");
    14. }
    15. Widget::~Widget()
    16. {
    17. delete ui;
    18. }
    19. //绘制事件处理函数
    20. void Widget::paintEvent(QPaintEvent *event)
    21. {
    22. //实例化一个画家
    23. QPainter painter(this);
    24. // 设置反锯齿渲染
    25. painter.setRenderHint(QPainter::Antialiasing, true);
    26. //实例化一个画笔
    27. QPen pen;
    28. pen.setColor(QColor("blue"));
    29. //设置线型
    30. pen.setStyle(Qt::DashDotLine);
    31. //将画笔给画家安排上
    32. painter.setPen(pen);
    33. //设置基准坐标系
    34. painter.translate(this->width()/2,this->height()/2);
    35. //画个钟盘
    36. painter.setBrush(QBrush(QColor("skyblue")));
    37. painter.drawEllipse(QPoint(0,0),200,200);
    38. //绘制矢量文字
    39. pen.setColor(QColor("black"));
    40. painter.setPen(pen);
    41. //给画家设置字体
    42. painter.setFont(QFont("隶书",15,13));
    43. //画小时格子
    44. for(int i=1;i<=12;i++)
    45. {
    46. //每转30度画一个时刻
    47. painter.rotate(30);
    48. pen.setWidth(4);
    49. painter.setPen(pen);
    50. painter.drawLine(0,-200,0,-175);
    51. painter.drawText(0,-170,QString("%1").arg(i));
    52. }
    53. //画分格子
    54. for(int i=0;i<=59;i++)
    55. {
    56. painter.rotate(6);
    57. pen.setWidth(2);
    58. painter.setPen(pen);
    59. painter.drawLine(0,-200,0,-190);
    60. }
    61. //绘制矢量文字
    62. painter.translate(-this->width()/2,-this->height()/2);
    63. painter.drawText(this->rect(),Qt::AlignCenter,"啊啊,我饿了");
    64. //绘制指针
    65. pen.setWidth(5);
    66. painter.translate(this->width()/2,this->height()/2);
    67. pen.setStyle(Qt::SolidLine); //设置线型
    68. //1、绘制秒针
    69. painter.save();
    70. painter.setPen(Qt::green);
    71. painter.setBrush(Qt::green);
    72. painter.rotate(ss*6-90);
    73. painter.drawLine(0,0,160,0);
    74. painter.restore();
    75. //2、绘制分针
    76. painter.save();
    77. painter.setPen(pen);
    78. painter.setPen(Qt::red);
    79. painter.rotate(6*(mm+ss/60.0)-90);
    80. painter.drawLine(0,0,140,0);
    81. painter.restore();
    82. //3、绘制时针
    83. painter.save();
    84. //painter.translate(this->width()/2,this->height()/2);
    85. pen.setWidth(4);
    86. painter.setPen(pen);
    87. painter.setPen(Qt::black);
    88. painter.setBrush(Qt::black);
    89. painter.rotate(30*(hh+mm/60.0+ss/3600.0)-90);
    90. painter.drawLine(0,0,90,0);
    91. painter.restore();
    92. }
    93. //定时器事件处理函数
    94. void Widget::timerEvent(QTimerEvent *e)
    95. {
    96. if(e->timerId() == timer_id) //说明定时器1到位
    97. {
    98. QDateTime current = QDateTime::currentDateTime(); // 获取当前系统时间
    99. QTime sys_t = current.time(); // 获取系统时间的时、分、秒
    100. hh = sys_t.hour();
    101. mm = sys_t.minute();
    102. ss = sys_t.second();
    103. update();
    104. qDebug()<<"hh:mm:ss"<
    105. }
    106. }

     main函数

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

  • 相关阅读:
    选择篇(067)-下面代码的输出是什么?
    招投标系统软件源码,招投标全流程在线化管理
    判断动物知识竞猜答案正误
    TS 函数 配合接口
    Java学习第一章:Java语言概述
    Redis实现短信登入功能(一)传统的Session登入
    几个强力的nodejs库
    xss原理分析
    华为ensp防火墙虚拟系统在网络中的部署
    python入门基础
  • 原文地址:https://blog.csdn.net/YSTXDY/article/details/133107119