• Qt day4


    简单时钟:

    widget.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. QT_BEGIN_NAMESPACE
    12. namespace Ui { class Widget; }
    13. QT_END_NAMESPACE
    14. class Widget : public QWidget
    15. {
    16. Q_OBJECT
    17. public:
    18. Widget(QWidget *parent = nullptr);
    19. ~Widget();
    20. void paintEvent(QPaintEvent *event);
    21. //自定义槽函数
    22. void timer_slot();
    23. private:
    24. Ui::Widget *ui;
    25. QTimer *timer;
    26. QPen pen;
    27. int second;
    28. int minute;
    29. int hour;
    30. };
    31. #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. //定时器实例化对象
    9. timer = new QTimer(this);
    10. connect(timer,&QTimer::timeout,this,&Widget::timer_slot);
    11. //启动定时器
    12. timer->start(1000);
    13. }
    14. Widget::~Widget()
    15. {
    16. delete ui;
    17. }
    18. void Widget::timer_slot(){
    19. QDateTime time = QDateTime::currentDateTime();
    20. QString t = time.toString("hh:mm:ss");
    21. //提取时间
    22. QStringList t1 = t.split(":");
    23. hour = t1[0].toUInt();
    24. minute = t1[1].toUInt();
    25. second = t1[2].toUInt();
    26. update();
    27. }
    28. void Widget::paintEvent(QPaintEvent *event){
    29. //定义一个马良
    30. QPainter painter(this);
    31. //抗锯齿
    32. painter.setRenderHint(QPainter::Antialiasing);
    33. //定义一个画笔
    34. pen.setWidth(3);
    35. pen.setColor(Qt::green);
    36. //马良用这个笔
    37. painter.setPen(pen);
    38. painter.setFont(QFont("楷体",18));
    39. //粉刷填充颜色
    40. QBrush back(QColor("skyblue"));
    41. painter.setBrush(back);
    42. //设置画笔起始位置
    43. painter.translate(this->width()/2,this->height()/2);
    44. //画个圆
    45. painter.drawEllipse(QPoint(0,0),200,200);
    46. //开始画刻度线
    47. int val = 6;
    48. //先转30度从小的开始画
    49. painter.rotate(30);
    50. for(int i = 0;i<60;i++){
    51. //再设置一个笔
    52. pen.setWidth(2);
    53. pen.setColor(QColor("popur"));
    54. painter.setPen(pen);
    55. //总共60个刻度,每过四个小的一个大的,大刻度要写上数字
    56. if(val%5 == 1){
    57. painter.drawLine(QPoint(0,-200),
    58. QPoint(0,-180));
    59. val++;
    60. }
    61. else{
    62. painter.drawLine(QPoint(0,-200),
    63. QPoint(0,-190));
    64. val++;
    65. }
    66. //每次偏移6度
    67. painter.rotate(6);
    68. }
    69. //转回来
    70. painter.rotate(-30);
    71. //时针
    72. pen.setWidth(5);
    73. pen.setColor(QColor("purple"));
    74. pen.setStyle(Qt::SolidLine);
    75. painter.setPen(pen);
    76. painter.rotate(hour*30+(minute*6+6*second/60)/12);
    77. painter.drawLine(QPoint(0,0),QPoint(0,-50));
    78. painter.rotate(-(hour*30+minute*6/12+6*second/60/12));
    79. //分针
    80. pen.setWidth(4);
    81. pen.setColor(QColor("blue"));
    82. pen.setStyle(Qt::SolidLine);
    83. painter.setPen(pen);
    84. painter.rotate(minute*6+second/10);
    85. painter.drawLine(QPoint(0,-100),QPoint(0,0));
    86. painter.rotate(-(minute*6+second/10));
    87. //秒钟
    88. pen.setWidth(3);
    89. pen.setColor(QColor("green"));
    90. pen.setStyle(Qt::SolidLine);
    91. painter.setPen(pen);
    92. painter.rotate(6*second);
    93. painter.drawLine(QPoint(0,-140),QPoint(0,0));
    94. }

     

  • 相关阅读:
    c语言的各种排序
    python多进程(类成员函数、log在多进程中使用、自己维护进程池)
    Python基础-4-操作列表
    无胁科技-TVD每日漏洞情报-2022-10-28
    基于JAVA-游戏账号交易平台-演示录像-计算机毕业设计源码+系统+mysql数据库+lw文档+部署
    Java工厂模式之总有你想不到的知识
    【图像处理 】003 图片处理工具类
    Linux下多线程的操作
    什么是CMDB?为什么企业需要CMDB?
    广和通5G AIoT模组引领亮相2022国际物联网展(IOTE),智赋行业数字化新价值
  • 原文地址:https://blog.csdn.net/2301_77665369/article/details/133101959