23062day4

2023-11-17

制作一个简易圆形时钟

头文件:

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPaintEvent>
#include <QDebug>
#include <QPainter>
#include <QTimerEvent>
#include <QTime>
#include <QThread>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
    void  timerEvent(QTimerEvent *e)override;
    void paintEvent(QPaintEvent *event) override;

private:
    Ui::Widget *ui;
    int timer_id;

};
#endif // WIDGET_H

源文件:

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

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

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

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);//创建一个画师对象
       painter.setRenderHint(QPainter::Antialiasing);

       // 将原点移动到窗口中心 (使画布居中)
       painter.translate(width() / 2, height() / 2);

       //放大
       painter.scale(2, 2);

       // 绘制表盘
       painter.setPen(Qt::black);//设置画笔为空。
       painter.setBrush(Qt::white);//设置画刷为白色。
       painter.drawEllipse(-100,-100, 200, 200);
       painter.drawText(-7,-78,"12");
       painter.drawText(78,5,"3");
       painter.drawText(-5,85,"6");
       painter.drawText(-83,5,"9");
       // 绘制刻度
       painter.setPen(Qt::black);//设置画笔为黑色。
       for (int i = 0; i < 12; ++i) {//循环绘制时钟刻度
           painter.drawLine(0, -90, 0, -100);
           painter.rotate(30);
       }
       for (int i = 0; i < 36; ++i) {
           painter.drawLine(0, -95, 0, -100);
           painter.rotate(10);
       }

       // 绘制时针、分针和秒针
       QTime time = QTime::currentTime();//获取当前时间。
       painter.rotate(30.0 * ((time.hour() + time.minute() / 60.0)));
       painter.setPen(Qt::NoPen);
       painter.setBrush(Qt::black);
       // 绘制时针,以多边形方式绘制,坐标点依次为(-2,5)、(2,5)、(0,-80)
       painter.drawPolygon(QPolygonF(QVector<QPointF>() << QPointF(-2, 5)
                                                        << QPointF(2, 5)
                                                        << QPointF(0, -50)));

       painter.rotate(6.0 * (time.minute() + time.second() / 60.0));//60分钟转360度,一分钟转6度
       painter.setBrush(Qt::blue);
       painter.drawPolygon(QPolygonF(QVector<QPointF>() << QPointF(-1, 5)
                                                        << QPointF(1, 5)
                                                        << QPointF(0, -75)));

       painter.rotate(6.0 * time.second());
       painter.setBrush(Qt::red);
       painter.drawPolygon(QPolygonF(QVector<QPointF>() << QPointF(-1, 5)
                                                        << QPointF(1, 5)
                                                        << QPointF(0, -90)));

       this->update();
}

void Widget::timerEvent(QTimerEvent *e)
{
    timer_id=this->startTimer(1000);
}


测试文件:

#include "widget.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

运行结果:

思维导图:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

23062day4 的相关文章

随机推荐

  • 课程作业1-简单课程设计作业——个人通讯录数据库系统(java,MySQL)

    总结介绍 本次个人通讯录数据库系统主要目的是为了做出一个功能齐全 简单易用的信息管理系统提高保存联系人效率 由于能力有限 界面做的有点不好看 还有在登录的编程只做到将登录名和密码设为固定的字符值 修改只能从代码处进行修改 未做到可注册多个用
  • 02-----关于Qt下报error: undefined reference to `__imp_WSAGetLastError‘(Windows环境)

    1 关于Qt下报error undefined reference to imp WSAGetLastError Windows环境 错误已经很明确了 就是我们在Windows下使用网络相关的接口时 必须初始化网络库 即socket库的编译
  • JDBC常用连接URL

    1 Oracle8 8i 9i数据库 thin模式 Class forName oracle jdbc driver OracleDriver newInstance String url jdbc oracle thin localhos
  • SpringBoot整合hibernate

    添加springboot依赖 先使用idea创建maven项目 创建过程可以参考下面的博客 http blog csdn net supervictim article details 53490046 创建完maven项目之后添加spri
  • 用例编号怎么规定_怎么看检测报告

    一 怎么看检测报告 1 无论是使用什么系统来检测论文 在检测完成之后都会出现有查看报告 下载报告的相关项目或者按钮 直接点击查看报告项就可以查看报告 点击下载报告项就会将检测报告用PDF的形式保存到本地 2 以知网的检测报告为例 在检测报告
  • (小白教程)anaconda安装配置及可能遇到的问题解决

    相信来搜索的都懂anaconda 的绝美优势 这里便不再赘述了 啥也不说 开干 第一步 下载并安装软件 https www anaconda com 选择适合你的版本 我这里是window10 以管理员身份运行 选择All Users 继续
  • APNS设置

    APNS设置 openssl x509 in aps development cer inform der out MobileCAPCert pem openssl pkcs12 nocerts out MobileCAPKey pem
  • 【javaScript面试题】2023前端最新版javaScript模块,高频24问

    博 主 初映CY的前说 前端领域 个人信条 想要变成得到 中间还有做到 本文核心 博主收集的关于javaScript的面试题 目录 一 2023javaScript面试题精选 1 js的数据类型 2 双等和三等的区别 3 js中布尔值为fa
  • css3选择器之:nth-child(n)和:nth-of-child(n)

    nth child n 和 nth of child n nth child n 选择器匹配属于其父元素的第 N 个子元素 不论元素的类型 通俗一点的用法就是 nth child n 表示谁的弟n个 比如li nth chidl 3 表示页
  • Llama 2: Open Foundation and Fine-Tuned Chat Models

    文章目录 TL DR Introduction 背景 本文方案 实现方式 预训练 预训练数据 训练细节 训练硬件支持 预训练碳足迹 微调 SFT SFT 训练细节 RLHF 人类偏好数据收集 奖励模型 迭代式微调 RLHF 拒绝采样 Rej
  • 触发器(删除操作)

    在删除xs时 把xscj中对应的记录删除 DELIMITER CREATE TRIGGER xs delete AFTER DELETE ON xs FOR EACH ROW BEGIN DELETE FROM xscj WHERE xh
  • 云效知识库 Thoughts,企业文档管理工具

    云效知识库 Thoughts 企业文档管理工具 云效知识库是一款企业 知识管理 工具 通过独立的知识库空间 结构化地组织在线协作文档 实现企业知识的积累和沉淀 促进知识的高度复用和流通 云效知识库是云效团队孵化的一个创新项目 从最早的构想到
  • git commit -m 'project initialized'报did not match any file known to git的错误的问题

    摘要 这两天需要将本地的代码和码云上的代码进行统一下 需将本地的代码上传到码云中 在使用git的时候报了错 实现过程 首先在控制台上输入命令行 查看本地的新的文件 git status 输入命令行 将新的文件新增到git的缓冲区 git a
  • 海量数据存储读后感

    海量数据存储系列读后感 读了淘宝的海量数据存储系列 感觉豁然开朗 见地提升了很多 现在简单用自己的话总结一下里边的 精髓 SQL与关系代数 第1 2章 第一 二章内容比较简单 第一章给了我们一个模型 他是一个三层结构 模型如下 用户API
  • Scratch和机器人编程有什么区别?

    Scratch编程和机器人编程的区别就是 Scratch是面向青少年的图形化简易编程软件 孩子们可以通过不同功能的指令方块组合 创作出交互式故事 动画 游戏 音乐 艺术和科学计算等作品 而机器人编程则是以机器人为载体 通过程序指令控制完成机
  • MySQL中的编码问题Incorrect string value: '\xE7\xA8\x8B\xE5\xBA\x8F...' for column '字段名' at row 1 问题的解决方法

    今天往mysql数据库中添加数据时出现了如标题的错误 因为刚刚把数据库版本从8 0换成了5 5 27版本 于是网上搜了一下答案 搜了很多修改了都没用 最后终于成功了之后总结了一下 一 修改mysql数据库的编码为uft8mb4 修改mysq
  • 特征工程介绍

    特征工程基础知识 文章目录 1 特征工程是什么 2 数据预处理 2 1 无量纲化 2 1 1 标准化 2 1 2 区间缩放法 2 1 3 归一化 2 2 特征二值化 2 3 独热编码 2 4 缺失值计算 3 特征选择 3 1 Filter
  • Python -- Numpy:添加一列

    np insert 指定位置添加一列 a np arange 12 reshsape 3 4 print a array 0 1 2 3 4 5 6 7 8 9 10 11 b np ones 3 print b array 1 1 1 n
  • IDEA远程调试

    1 概述 原理 本机和远程主机的两个 VM 之间使用 Debug 协议通过 Socket 通信 传递调试指令和调试信息 被调试程序的远程虚拟机 作为 Debug 服务端 监听 Debug 调试指令 jdwp是Java Debug Wire
  • 23062day4

    制作一个简易圆形时钟 头文件 ifndef WIDGET H define WIDGET H include