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();

   }
相关推荐
李艺为3 分钟前
根据apk包名动态修改Android品牌与型号
android·开发语言
奇树谦7 分钟前
Qt | 利用map创建多个线程和定时器
网络·数据库·qt
黄河滴滴34 分钟前
java系统变卡变慢的原因是什么?从oom的角度分析
java·开发语言
老华带你飞1 小时前
农产品销售管理|基于java + vue农产品销售管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
superman超哥1 小时前
Rust Workspace 多项目管理:单体仓库的优雅组织
开发语言·rust·多项目管理·rust workspace·单体仓库
kylezhao20191 小时前
C#通过HSLCommunication库操作PLC用法
开发语言·c#
JIngJaneIL2 小时前
基于springboot + vue房屋租赁管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
期待のcode2 小时前
Java的抽象类和接口
java·开发语言
wadesir3 小时前
Go语言中高效读取数据(详解io包的ReadAll函数用法)
开发语言·后端·golang
小高不明3 小时前
前缀和一维/二维-复习篇
开发语言·算法