• c++&qt day11


    通过代码实现电子钟表

    头文件

    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. void paintEvent(QPaintEvent *event) override;
    20. private:
    21. Ui::Widget *ui;
    22. int m_sec = 0;
    23. int m_min = 0;
    24. int m_hour = 0;
    25. QTimer *timer;
    26. void timeout_slot();
    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. timer = new QTimer(this);
    9. timer->start(1000);//一秒钟
    10. connect(timer, &QTimer::timeout, this, &Widget::timeout_slot);
    11. }
    12. Widget::~Widget()
    13. {
    14. delete ui;
    15. }
    16. void Widget::paintEvent(QPaintEvent *event)
    17. {
    18. //实例化画家1
    19. QPainter painter(this);
    20. //实例化一个画笔
    21. QPen pen; //使用无参构造
    22. pen.setColor(QColor("black")); //设置画笔颜色
    23. //pen.setStyle(Qt::DashDotDotLine); //设置线型
    24. pen.setWidth(5); //设置画笔宽度
    25. //将画笔给画家
    26. painter.setPen(pen);
    27. //给画家安排画刷
    28. painter.setBrush(QBrush(QColor("skyblue")));
    29. //给画家偏移起始坐标点
    30. painter.translate(this->width()/2, this->height()/2);
    31. //给画家偏移坐标系
    32. //painter.rotate(0); //旋转坐标系
    33. //画个椭圆
    34. painter.drawEllipse(QPoint(0,0), 200, 200);
    35. //画刻度线
    36. for(int i = 1; i <=60; ++i)
    37. {
    38. painter.save();
    39. painter.rotate(6*i);//坐标轴旋转6度
    40. if (i % 5 == 0)
    41. {
    42. painter.drawLine(0, -188, 0, -200);
    43. painter.drawText(QPoint(-6,-160), QString::number(i/5));
    44. }
    45. else
    46. {
    47. painter.drawLine(0, -192, 0, -200);
    48. }
    49. painter.restore();//绘制图形后复位坐标系
    50. }
    51. painter.save();
    52. painter.rotate(6*m_sec);
    53. painter.drawLine(0,0,0,-170);
    54. painter.restore();
    55. painter.save();
    56. double m = (m_min*6.0 + m_sec*0.1);
    57. painter.rotate(m);
    58. painter.drawLine(0,0,0,-140);
    59. painter.restore();
    60. painter.save();
    61. double h = (m_hour%12 + m_min/60.0)*30.0;
    62. painter.rotate(h);
    63. painter.drawLine(0,0,0,-110);
    64. painter.restore();
    65. }
    66. void Widget::timeout_slot()
    67. {
    68. QDateTime datetime = QDateTime::currentDateTime();
    69. m_sec = datetime.time().second();
    70. m_min = datetime.time().minute();
    71. m_hour = datetime.time().hour();
    72. update();
    73. }

    主函数

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

    效果展示

  • 相关阅读:
    .net6+aspose.words导出word并转pdf
    JDBC-day03(BLOB类型字段,批量插入)
    fsl_imx8编译烧写命令
    idea远程拉取新项目
    2022-01-22-JDBC
    6.4.2 基于GZ文件安装MySQL
    金融数据合规管理研究
    STM32:串口发送
    防火墙应用场景
    优思学院|六西格玛管理常用的假设检验是什么?
  • 原文地址:https://blog.csdn.net/weixin_65188498/article/details/133102248