QT day4

复制代码
#define WIDGET_H

#include <QWidget>
#include<QPaintEvent>
#include<QPainter>
#include<QTime>
#include<QTimer>
#include<QPen>
#include<QFont>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();


    void paintEvent(QPaintEvent *event) override;

private slots:
    void timeout_slot();


private:

    Ui::Widget *ui;

    QTimer *timer;

    double h = 0;
    double m = 0;
    double s = 0;
};
#endif // WIDGET_H

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    timer = new QTimer(this);
    timer->start(1000);//一秒钟
    connect(timer, &QTimer::timeout, this, &Widget::timeout_slot);
}

Widget::~Widget()
{
    delete ui;
}


void Widget::paintEvent(QPaintEvent *event)
{

    //实例化一个画家
       QPainter painter(this);

       painter.setRenderHint(QPainter::Antialiasing);
       //实例化一个画笔
       QPen pen;
       pen.setColor(QColor("black"));
       pen.setStyle(Qt::SolidLine);
       pen.setWidth(7);


       //表盘
       painter.setPen(pen);
       painter.translate(this->width()/2, this->height()/2);
       painter.drawEllipse(QPoint(0, 0), 200, 200);

       //刻度
       pen.setWidth(4);
       painter.setPen(pen);

       for(int i = 1; i <= 60; i++)
       {
           painter.save();
           painter.rotate(i*6);

           if(!(i % 5))
           {
               painter.drawLine(0, -200, 0, -175);
               painter.drawText(-20, -170, 40, 40, Qt::AlignHCenter | Qt::AlignTop, QString::number(i/5));
           }
           else
           {
               painter.drawLine(0, -200, 0, -190);
           }
           painter.restore();
       }

       //时针
       painter.save();
       pen.setColor(QColor("yellow"));
       pen.setStyle(Qt::SolidLine);
       pen.setWidth(6);

       painter.setPen(pen);
       painter.rotate(30*h);
       painter.drawLine(0, 0, 0, -60);
       painter.restore();

       //分针
       painter.save();
       pen.setColor(QColor("red"));
       pen.setStyle(Qt::SolidLine);
       pen.setWidth(3);

       painter.setPen(pen);
       painter.rotate(6*m);
       painter.drawLine(0, 0, 0, -100);
       painter.restore();

       //秒针
       painter.save();
       pen.setColor(QColor("blue"));
       pen.setStyle(Qt::SolidLine);
       pen.setWidth(1);

       painter.setPen(pen);
       painter.rotate(6*(s+1));
       painter.drawLine(0, 0, 0, -160);
       painter.restore();
       update();
   }

   void Widget::timeout_slot()
   {
       QTime time = QTime::currentTime();
       h = time.hour();
       m = time.minute();
       s = time.second();

   }
相关推荐
雨落倾城夏未凉10 分钟前
7.QObject定时器和QTimer定时器的区别
后端·qt
笑鸿的学习笔记38 分钟前
qt-C++语法笔记之Stretch与Spacer的关系分析
c++·笔记·qt
留不住丨晚霞43 分钟前
说说SpringBoot常用的注解?
java·开发语言
hardStudy_h1 小时前
C++——内联函数与Lambda表达式
开发语言·jvm·c++
艾莉丝努力练剑1 小时前
【C语言】学习过程教训与经验杂谈:思想准备、知识回顾(三)
c语言·开发语言·数据结构·学习·算法
witton3 小时前
Go语言网络游戏服务器模块化编程
服务器·开发语言·游戏·golang·origin·模块化·耦合
枯萎穿心攻击3 小时前
ECS由浅入深第三节:进阶?System 的行为与复杂交互模式
开发语言·unity·c#·游戏引擎
Jerry Lau3 小时前
go go go 出发咯 - go web开发入门系列(一) helloworld
开发语言·前端·golang
nananaij4 小时前
【Python基础入门 re模块实现正则表达式操作】
开发语言·python·正则表达式
Micro麦可乐4 小时前
Java常用加密算法详解与实战代码 - 附可直接运行的测试示例
java·开发语言·加密算法·aes加解密·rsa加解密·hash算法