坐牢第三十八天(Qt)

news2024/9/26 1:25:33

1、使用Qt绘画事件处理画一个闹钟

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QDebug>
#include <QPaintEvent>//画画处理事件
#include <QPainter>//画画
#include <QTime>   //时间类
#include <QTimer> //计时器类
#include <QIcon> //图标类
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);//绘制事件
public slots:
    //timeout信号的槽函数
    void timeout_slot();

private:
    Ui::Widget *ui;
    QPoint startpoin;//绘制起始点

    QTimer* timer1;  //定义一个定时器类的指针
    quint8 hour;
    quint8 minute;
    quint8 second;

    int cnt;

};
#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QtMath>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    this->setFixedSize(800,800);//设置固定大小
    this->setWindowTitle("牛逼的闹钟");
    this->setWindowIcon(QIcon(":/icon/naozhong.png"));//设置窗体图标
    //给打开第一下获取时间
    QTime timer =QTime::currentTime();//获取当前时间
    QString t=timer.toString("hh:mm:ss");//转换为字符串
    QStringList tlist =t.split(":"); //以 :分割t

    hour =tlist[0].toUInt(); //将小时传化为无符号整数
    minute =tlist[1].toUInt(); //将分钟传化为无符号整数
    second =tlist[2].toUInt(); //将秒传化为无符号整数

    timer1 = new QTimer(this);//给定时器类指针实例化对象
    timer1->start(1000);

    //将定时器类对象的timeout信号与自定义的槽函数进行连接
    connect(timer1,&QTimer::timeout,this,&Widget::timeout_slot);

}

Widget::~Widget()
{
    delete ui;
}
//绘制事件处理函数
void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);//实例化一个画家
    painter.setRenderHint(QPainter::Antialiasing, true);
    //准备画笔
    QPen pen;
    pen.setColor(QColor("black"));//设置颜色
    //给画家安排上画笔
    painter.setPen(pen);
    //设置画家坐标起点
    painter.translate(this->width()/2,this->height()/2);
    QBrush brush1(QColor("skyblue"));//刷子
    painter.setBrush(brush1);//给大圆填充
    //绘制一个圆
    painter.drawEllipse(QPoint(0,0),300,300);
    QBrush brush(QColor("red"));//刷子
    painter.setBrush(brush);//给节点填充
    //给中心点画一个节点
    painter.drawEllipse(QPoint(0,0),10,10);
    //绘制小时刻度线
    for(int i=0;i<12;i++)
    {
        pen.setColor(QColor("black"));
        pen.setWidth(3);
        painter.setPen(pen);
        painter.drawLine(QPoint(0,300),QPoint(0,280));//画一个长度20的直线
        painter.rotate(30);//旋转画家 30度
    }
    //绘制每五分钟刻度线
    for(int i=0;i<60;i++)
    {
        pen.setColor(QColor("black"));
        pen.setWidth(1);
        painter.setPen(pen);
        painter.drawLine(QPoint(0,300),QPoint(0,290));//画一个长度10的直线
        painter.rotate(6);//旋转画家 6度
    }
    painter.setPen(QColor(100,100,100));
    QFont font;
    font.setFamily("SimHei");
    font.setPointSize(16);
    painter.setFont(font);
    //绘制数字 
    for(int i=0;i<12;++i)
    {
        QPointF point(0,0);
        painter.save();
        //计算并移动绘图对象中心点
        point.setX(250*qCos(((60-i*30)*3.14)/180)); //我看不懂 你写就对了
        point.setY(250*qSin(((60-i*30)*3.14)/180));  //我看不懂 你写就对了
        //计算并移动绘图对象的中心点
        painter.translate(point.x(),-point.y());
        //绘制路径
        painter.drawText(-15, -15, 30, 30,Qt::AlignCenter,QString::number(i+1));//我看不懂 你写就对了
        painter.restore();
    }
    //绘制小时指针
    QPainter painterH(this);
    painterH.translate(this->width()/2,this->height()/2);
    pen.setColor(QColor("red"));
    pen.setWidth(6);
    painterH.setPen(pen);
    painterH.rotate(hour*30+(minute/60)*30+second/3600*30);
    painterH.drawLine(0,0,0,-90);

    //绘制分钟指针
    QPainter painterM(this);
    painterM.translate(this->width()/2,this->height()/2);
    pen.setColor(QColor("green"));
    pen.setWidth(4);
    painterM.setPen(pen);
    painterM.rotate(minute*6+second/60*6);
    painterM.drawLine(0,0,0,-120);

    //绘制秒指针
    QPainter painterS(this);
    painterS.translate(this->width()/2,this->height()/2);
    pen.setColor(QColor("blue"));
    pen.setWidth(2);
    painterS.setPen(pen);
    painterS.rotate(second*6);
    painterS.drawLine(0,0,0,-150);
}
//timeout信号的槽函数
void Widget::timeout_slot()
{
    QTime timer =QTime::currentTime();//获取当前时间
    QString t=timer.toString("hh:mm:ss");//转换为字符串
    QStringList tlist =t.split(":"); //以 :分割t

    hour =tlist[0].toUInt(); //将小时传化为无符号整数
    minute =tlist[1].toUInt(); //将分钟传化为无符号整数
    second =tlist[2].toUInt(); //将秒传化为无符号整数

    update();
    QPaintEvent *Q=nullptr;
    this->paintEvent(Q);
}

效果图

 

2、思维导图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2125987.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

NVIDIA AI Workbench 让 Windows 上的 GPU 使用更加简便

NVIDIA AI Workbench 是一款免费的、用户友好型开发环境管理器&#xff0c;可在您选择的系统&#xff08;PC、工作站、数据中心或云&#xff09;上简化数据科学、ML 和 AI 项目。在 Windows、macOS 和 Ubuntu 上&#xff0c;您可以本地开发、测试项目和构建项目原型&#xff0c…

初识Maven:Java项目管理工具

实际开发中&#xff0c;伴随着项目规模的增长&#xff0c;依赖管理和构建自动化变得至关重要&#xff0c;一套标准化的项目结构有助于更好的开发项目、简化这项任务&#xff08;真的不是强迫症&#xff09; Maven&#xff0c;作为 Apache Software Foundation 维护的项目管理工…

如何获取MySQL数据表的列信息

在数据库管理中&#xff0c;了解表的结构是至关重要的。在MySQL中&#xff0c;我们可以通过几种方式来获取数据表的列信息。这不仅可以帮助我们更好地理解表的结构&#xff0c;还可以在编写查询时提供便利。以下是三种常用的方法来获取MySQL数据表的列信息。 使用 SHOW COLUMN…

HDMI彩条显示——FPGA学习笔记12

素材来自原子哥 一、HDMI简介 英文全称是High-Definition Multimedia Interface&#xff0c;即高清多媒体接口。 HDMI引脚解析&#xff08;A型&#xff09; HDMI工作连接图 HDMI工作原理 DVI编码输出示意图 二、TMDS编码&#xff08;最小化差分传输&#xff09; TMDS编码框图…

pip 阿里云镜像报错 certificate verify failed: unable to get local issuer certificate

在没有管理员身份&#xff0c;且有防火墙限制的电脑上&#xff0c;pip安装​python库包失败。​但是在普通的电脑上安装正常。​​报错内容如下&#xff1a; (SSS_web) C:\Users\HXAIYVQ>pip install flask -i https://mirrors.aliyun.com/pypi/simple/ Looking in indexes…

302.AI学术论文搜索工具的智能体验

Hey朋友们&#xff0c; 你是否曾在学术的海洋里迷失方向&#xff0c;为了找到一篇论文而苦苦挣扎&#xff1f; 就像在茫茫大海中寻找灯塔&#xff0c;我们渴望一盏明灯&#xff0c;指引我们前行。 别担心&#xff0c;今天我来给你介绍一个超级给力的工具——302.AI学术论文…

求教0基础入门大模型的学习路线?

0基础入门大模型&#xff0c;transformer、bert这些是要学的&#xff0c;但是你的第一口不一定从这里咬下去。真的没有必要一上来就把时间精力全部投入到复杂的理论、各种晦涩的数学公式还有编程语言上&#xff0c;这样不仅容易让你气馁&#xff0c;而且特别容易磨光热情。当我…

如何系统的入门大模型?

对于刚开始接触大模型&#xff08;LLM&#xff09;的研究者来说&#xff0c;系统地学习和探索是非常重要的。以下是一个循序渐进的学习路径&#xff0c;帮助你高效地入门大模型的领域。 1、浏览基础资源与课程 首先&#xff0c;你可以通过阅读几篇公众号或知乎上的文章来了解大…

动态数字时钟屏保 提升桌面美化 电脑屏幕屏保软件

时钟屏保软件可以让你的电脑更有特色&#xff0c;当你离开电脑时候&#xff0c;屏保可以保护你的桌面隐私&#xff0c;还是比较有用的一款小软件&#xff0c;今天小编给大家推荐的这款可以实现动态数字时钟的屏保软件&#xff1a;芝麻时钟 &#xff08;下载地址&#xff1a;htt…

终端显示字体背景和字体颜色

【终端显示字体背景和字体颜色等使用用法】 在命令行下想要产生五颜六色的字体和背景&#xff0c;只需要加上一些颜色代码即可。 ANSI 标准规定了一种所有终端共享的指令集&#xff0c;并要求用 ASCII 的数字字符传递所有数值信息&#xff0c;用于控制 Linux 终端上的光标位置…

抓包分析ARP协议工作原理

目录 1. ARP 协议 2. 工作原理 3. ARP 协议报文格式 4. ARP 缓存的查看和修改 5. tcpdump 抓包分析 ARP 协议工作原理 5.1 搭建 2 台虚拟机 5.2 在主机 192.168.0.155 打开一个shell命令行开启抓包监听 5.3 在主机 192.168.0.155 打开另一个shell命令行 telnet 192.168.…

恢复二叉搜索树

题目 给你二叉搜索树的根节点 root &#xff0c;该树中的两个节点被错误地交换。请在不改变其结构的情况下&#xff0c;恢复这棵树。 进阶&#xff1a;使用 O(n) 空间复杂度的解法很容易实现。你能想出一个只使用常数空间的解决方案吗&#xff1f; 示例 1&#xff1a; 输入&…

超声眼镜波清洗机有用吗?真正好用的超声波清洗机推荐

随着时代的进步&#xff0c;人们对家居生活质量的追求也日益提高。尤其是对于珠宝、饰品、眼镜等小物件&#xff0c;长时间不使用后往往会积累灰尘和细菌&#xff0c;这些细菌隐藏在肉眼看不到的地方&#xff0c;它们对健康的影响不容忽视。幸运的是&#xff0c;超声波清洗机能…

Nginx怎么重新编译添加模块

转自 https://www.php.cn/faq/547300.html

【机器人建模和控制】读书笔记

机器人建模和控制——马克斯庞 A. x 1 0 x 1 ∙ x 0 x^0_1x_1\bullet x_0 x10​x1​∙x0​&#xff0c;其实就是&#xff1a; 1&#xff09; x 1 x_1 x1​轴向量在 O 0 O_0 O0​系下的坐标 2&#xff09;在 x 0 x_0 x0​轴上的投影 3&#xff09;坐标变换矩阵的 R 1 0 R_1…

基于vue框架的城市智慧地铁管理系统73c2d(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;用户,站点查询,车次线路,站点周边 开题报告内容 基于Vue框架的城市智慧地铁管理系统开题报告 一、研究背景与意义 1.1 研究背景 随着城市化进程的加速和人口的不断增长&#xff0c;城市交通压力日益增大。地铁作为城市公共交通的重要…

利用AI驱动智能BI数据可视化-深度评测Amazon Quicksight(一)

项目简介 随着生成式人工智能的兴起&#xff0c;传统的 BI 报表功能已经无法满足用户对于自动化和智能化的需求&#xff0c;今天我们将介绍亚马逊云科技平台上的AI驱动数据可视化神器 – Quicksight&#xff0c;利用生成式AI的能力来加速业务决策&#xff0c;从而提高业务生产…

设置广告活动目标和数字广告关键绩效指标的3个步骤

在微调广告预算、优化广告、分析数字广告关键绩效指标&#xff08;KPI&#xff09;和个性化着陆页面的同时&#xff0c;有一件事是在启动广告活动之前必须做的&#xff1a;确定哪些因素能使广告活动有效。 广告商很容易迷失在构成成功活动的各种指标中&#xff0c;但事实是&am…

20240912 每日AI必读资讯

OpenAI计划在接下来的两周内发布Strawberry - 独立产品&#xff1a;尽管草莓是ChatGPT的一部分&#xff0c;但它将作为一个独立的产品发布&#xff0c;具体如何提供尚不清楚。它可能会出现在用户选择的AI模型下拉菜单中&#xff0c;与现有服务有所不同。 - 推理功能&#xff…

红帽RHCE认证值不值得考?RHCE认证有什么用?

在IT行业&#xff0c;红帽认证作为一项衡量Linux技能水平的重要标准&#xff0c;受到了广泛的关注和认可。 拥有一张权威认证证书无疑是提升自身竞争力、实现职业发展的重要途径。 RHCE认证作为Linux领域的顶级认证之一&#xff0c;其价值和意义不言而喻。 那么&#xff0c;…