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

   }
相关推荐
麒qiqi几秒前
进阶 IMX6ULL 裸机开发:从 C 语言点灯到 BSP 工程化(附 SDK / 链接脚本实战)
c语言·开发语言
秋刀鱼程序编程7 分钟前
Java基础入门(七)---异常处理
java·开发语言·python
遇见你的雩风9 分钟前
Java---多线程(一)
java·开发语言
小白学大数据10 分钟前
基于 Python 的知网文献批量采集与可视化分析
开发语言·爬虫·python·小程序
Ulyanov11 分钟前
PyVista战场可视化实战(一):构建3D战场环境的基础
开发语言·python·3d·tkinter·gui开发
霸道流氓气质21 分钟前
Java 实现折线图整点数据补全与标准化处理示例代码讲解
java·开发语言·windows
冬奇Lab23 分钟前
【Kotlin系列10】协程原理与实战(上):结构化并发让异步编程不再是噩梦
android·开发语言·kotlin
薛不痒26 分钟前
项目:矿物分类(训练模型)
开发语言·人工智能·python·学习·算法·机器学习·分类
姜太小白28 分钟前
【前端】JavaScript字符串执行方法总结
开发语言·前端·javascript
被星1砸昏头28 分钟前
C++与Node.js集成
开发语言·c++·算法