当前位置: 首页 > article >正文

QT 绘制简易时钟

头文件

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPainter>
#include <QTime>
#include <QTimerEvent>
#include <QDebug>

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:
    Ui::Widget *ui;

    //声明 事件处理函数 重载
    void timerEvent(QTimerEvent *event) override;

};
#endif // WIDGET_H

原文件

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

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

    this->startTimer(1000);
}

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

//时钟底座
void Widget::paintEvent(QPaintEvent *event)
{   
    QPainter painter(this);//实例化画家
    QPen pen;//实例化笔
    QFont font;//实例化字体

    //画笔属性
    pen.setWidth(5);

    //字体属性
    font.setFamily("楷体");
    font.setPointSize(10);

    //画家属性
    painter.setPen(pen);
    painter.setFont(font);
    painter.translate(this->width()/2,this->height()/2);//画家坐标

    //绘制圆
    painter.drawEllipse(QPoint(0,0),300,300);

    //绘制粗刻度
    painter.rotate(-60);
    for(int i = 0; i < 12; i++)
    {
        painter.drawLine(300,0,290,0);
        painter.rotate(30);
    }

    //绘制细刻度
    pen.setWidth(2);
    painter.setPen(pen);
    painter.rotate(-24);
    for(int i = 0; i < 60 ; i++)
    {
        painter.drawLine(300,0,295,0);
        painter.rotate(6);
    }

    //获取系统时间
    QTime time = QTime::currentTime();

    //绘制秒针
    painter.setPen(pen);
    painter.rotate(-6);
    painter.rotate(6*time.second());
    painter.drawLine(290,0,0,0);
    painter.rotate(-6*time.second());

    //绘制分针
    pen.setWidth(10);
    painter.setPen(pen);
    painter.rotate(6*time.minute());
    painter.drawLine(200,0,0,0);
    painter.rotate(-6*time.minute());

    //绘制时针
    pen.setWidth(15);
    painter.setPen(pen);
    painter.rotate(30*time.hour());
    painter.drawLine(100,0,0,0);

    qDebug()<<time.hour()<<" "<<time.minute()<<" "<<time.second();
}

void Widget::timerEvent(QTimerEvent *event)
{
    this->update();
}

 


http://www.kler.cn/news/311186.html

相关文章:

  • Weblogic部署
  • 如何在Unity发布安卓移动端游戏
  • FinGPT金融大模型
  • 表情包创作、取图小程序端(带流量主)
  • 详解x86汇编指令:test edx, edx
  • 如何基于Redis通过对接阿里云短信服务实现验证码登录
  • LeetCode 876
  • 后端往前端传递数据json方法大全
  • 汇编实现从1加到1000(《X86汇编语言 从实模式到保护模式(第2版》) 第135页第2题解答)
  • 【Kubernetes】常见面试题汇总(十三)
  • 学习ROS2第一天—新手笔记(humble版本)
  • 关于Redis
  • Mamba YOLO World
  • 集合是什么
  • 金手指设计
  • CefSharp_Vue交互(Element UI)_WinFormWeb应用(3)---通过页面锁屏和关机(含示例代码)
  • 新的突破,如何让AI与人类对话变得“顺滑”:Moshi背后的黑科技
  • 【Webpack--011】配置开发和生产模式的webpack.config.js
  • 【算法】滑动窗口—找所有字母异位词
  • 解决使用nvm ls命令没有出现*的问题
  • 华为OD机试 - 打印机队列 - 优先队列(Python/JS/C/C++ 2024 E卷 200分)
  • 【分立元件】案例:新人加了个TVS管为什么可能导致系统不能正常工作
  • 【Unity】URP Rendering总结
  • 【C++STL简介】——我与C++的不解之缘(八)
  • 【PyTorch】深入浅出PyTorch
  • 模版进阶(template)
  • Java项目: 基于SpringBoot+mybatis+maven洗衣店订单管理系统(含源码+数据库+开题报告+任务书+毕业论文)
  • 【Flink Flick CDC】学习笔记
  • 架构设计 - 常用日志收集方案选型对比与推荐
  • 【java面试每日五题之基础篇一】(仅个人理解)