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

   }
相关推荐
DdduZe4 分钟前
9.11作业
c++·qt
鱼嘻4 分钟前
西嘎嘎学习 - C++ 继承 - Day 10
开发语言·c++·学习·算法
孤廖10 分钟前
从 “模板” 到 “场景”,用 C++ 磨透拓扑排序的实战逻辑
开发语言·c++·程序人生·算法·贪心算法·动态规划·学习方法
我有火的意志19 分钟前
Liunx执行source /etc/profile 报错, -bash: HISTTIMEFORMAT: readonly variable
开发语言·bash·histtimeformat·readonly
-凌凌漆-33 分钟前
【Qt】【C++】虚析构函数及 virtual ~Base() = default
java·c++·qt
蒋星熠37 分钟前
中间件架构设计与实践:构建高性能分布式系统的核心基石
开发语言·数据库·分布式·python·中间件·性能优化·硬件工程
枫叶丹438 分钟前
【Qt开发】显示类控件(二)-> QLCDNumber
开发语言·qt
励志不掉头发的内向程序员1 小时前
STL库——AVL树
开发语言·c++·学习
晨非辰3 小时前
#C语言——刷题攻略:牛客编程入门训练(十一):攻克 循环控制(三),轻松拿捏!
c语言·开发语言·经验分享·学习·visual studio
励志码农5 小时前
JavaWeb 30 天入门:第二十三天 —— 监听器(Listener)
java·开发语言·spring boot·学习·servlet