QT 基础学习

news2024/11/18 15:43:39

1> 使用绘制事件完成钟表的绘制

头文件

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPainter>
#include <QDebug>
#include <QTime>
#include <QTimer>
#include <QDateTime>
//#include <string>
#include <QPixmap>

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;

    void timeout_slot();


private:
    Ui::Widget *ui;
    //实例化一个膜
    QPixmap *pix;
    //定义一个定时器变量
    QTimer t1;

};
#endif // WIDGET_H

源文件

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

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

    //实例化屏幕膜
    pix = new QPixmap(this->size());      //实例化一个膜大小跟当前界面一致
    pix->fill(Qt::white);               //使用白色进行填充

    //将时间函数与t1绑定在一起
    t1.start(1000);
    connect(&t1, &QTimer::timeout, this, &Widget::timeout_slot);
}

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

void Widget::paintEvent(QPaintEvent *event)
{

    //1、准备一个画家,在界面上进行绘制
    QPainter p2(this);
     //2、将pix绘制到界面上
    p2.drawPixmap(QPoint(0,0), *pix);

    //实例化一个画家
    QPainter painter(this);

    //准备画笔
    QPen pen;
    pen.setStyle(Qt::SolidLine);
    pen.setColor(QColor("black"));
    pen.setWidth(5);

    //准备字体
    QFont font;
    font.setFamily("楷体");        //设置字体族
    font.setStyle(QFont::StyleItalic);    //设置字体倾斜
    font.setPointSize(13);             //设置字号

    //将画家和笔绑定
    painter.setPen(pen);

    //给画家安排字体
    painter.setFont(font);

    //在屏幕中间画一个圆
    painter.translate(this->width()/2,this->height()/2);
    int radius=this->width()>this->height()?this->height():this->width();
    painter.drawEllipse(QPoint(0,0),radius/2-10,radius/2-10);

    //将坐标轴变成正方向
    painter.rotate(6+180);

    //绘制钟表
    for(int i=1;i<=60;i++)
    {
        if(i%5!=0)
        {
            painter.drawLine(0,radius/2-20,0,radius/2-10);
        }else
        {
            painter.drawLine(0,radius/2-30,0,radius/2-10);
            // 将整数 i 转换为 QString
            QString str = QString::number(i/5);
            painter.drawText(QPoint(0,radius/2-30-10),str);
        }

        painter.rotate(6);
    }
    painter.rotate(-6);
}


void Widget::timeout_slot()
{
    pix->fill(Qt::white);
    QTime sysTime = QTime::currentTime();

    // 分别提取小时、分钟和秒
    int hours = sysTime.hour();
    int minutes = sysTime.minute();
    int seconds = sysTime.second();
    qDebug()<<seconds;


    //实例化一个画家
    QPainter painter(pix);

    //准备画笔
    QPen pen;
    pen.setStyle(Qt::SolidLine);
    
    //将坐标轴移到中点
    painter.translate(this->width()/2,this->height()/2);

    //将坐标轴变成秒针反向
    painter.rotate(180+6*seconds);

    //2、使用画家画秒针
    pen.setColor(QColor("green"));
    pen.setWidth(5);
    painter.setPen(pen);
    painter.drawLine(0,-20,0,200);


    //将坐标轴变成秒针方向
    painter.rotate(360-6*seconds+6*minutes);

    //2、使用画家画分针
    pen.setColor(QColor("blue"));
    pen.setWidth(10);
    painter.setPen(pen);
    painter.drawLine(0,-15,0,150);      

    //将坐标轴变成秒针方向
    painter.rotate(360+30*hours-6*minutes);

    //2、使用画家画时针
    pen.setColor(QColor("red"));
    pen.setWidth(15);
    painter.setPen(pen);
    painter.drawLine(0,-10,0,100);      

    //3、更新界面内容
    this->update();

}



 

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

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

相关文章

发送成绩的app或小程序推荐

老师们&#xff0c;新学期的第一次月考马上开始&#xff0c;是不是还在为如何高效、便捷地发布成绩而头疼呢&#xff1f;别担心&#xff0c;都2024年了&#xff0c;我们有更智能的方式来解决这个问题&#xff01; 给大家安利一个超级实用的工具——易查分小程序。这个小程序简…

esp32-C2 对接火山引擎实现智能语音(一)

目录 一、火山引擎大模型简介 1)火山引擎网址: 2)首先需要先注册火山引擎账号 3)语音识别——即语音转为文本 一句话识别 流式语音识别 录音文件识别标准版 录音文件识别极速版 4)语音合成——文本转音频 一、火山引擎大模型简介 火山引擎的智能语音技术,基于业界先…

ORCA-3D避障算法解析

二维ORCA原理参考&#xff1a; https://zhuanlan.zhihu.com/p/669426124 ORCA原理图解 1. 找到避障速度增量 u 碰撞处理分为三种情况&#xff1a; &#xff08;1&#xff09;没有发生碰撞&#xff0c;且相对速度落在小圆里 &#xff08;2&#xff09;没有发生碰撞&#xff0…

C++---string类常见接口

介绍 string类详情>>>https://cplusplus.com/reference/string/string/?kwstring 1. string是表示字符串的字符串类&#xff08;感觉就像一个动态的字符数组&#xff09; 2. 该类的接口与常规容器的接口基本相同&#xff0c;再添加了一些专门用来操作string的常规操作…

9月19日与MongoDB相约2024云栖大会

2024云栖大会来了&#xff01; 9月19日至9月21日 在杭州云栖小镇召开 汇集全球最新云计算和AI硬科技 MongoDB互动展区 2号馆2-8展区 MongoDB技术演讲 9月20日 分论坛&#xff1a;D2-5 2024云栖大会将设置 人工智能、计算、前沿应用三大主题馆&#xff0c; 围绕云计算与AI&#…

面试官:说说停止线程池的执行流程?

对于我们使用的线程池 ThreadPoolExecutor 来说&#xff0c;停止线程池的方法有以下两个&#xff1a; shutdown()&#xff1a;优雅的关闭线程池&#xff0c;即不再接受新任务&#xff0c;但会等待已提交任务&#xff08;包括正在执行的任务和在队列中等待的任务&#xff09;执行…

【C++高阶】解锁C++的深层魅力——探索特殊类的奥秘

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ ⏩收录专栏⏪&#xff1a;C “ 登神长阶 ” &#x1f921;往期回顾&#x1f921;&#xff1a;C 类型转换 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀C特殊类 &#x1f4d2;1. 不能被拷贝…

外贸网站建设该怎么做

外贸网站已成为企业拓展国际市场、促进贸易合作的重要工具。然而&#xff0c;要想在竞争激烈的国际贸易舞台上脱颖而出&#xff0c;就需要一套科学有效的外贸网站建设方案。本文将为您介绍成功打造外贸网站的关键步骤&#xff0c;助您在数字化时代实现更广阔的国际商机。 第一步…

嗨! 大叔,什么时候退休?

先祝各位中秋快乐&#xff01;&#xff01;&#xff01;接下我们吃瓜。娱乐至上&#xff01; 纯属娱乐&#xff0c;没验证是否正确&#xff01; 2024年9月13日第十四届全国人民代表大会常务委员会第十一次会议通过关于实施渐进式延迟法定退休年龄的决定,我将规则给ChatGPT&am…

如何绕过Cloudflare的403 禁止错误?

Cloudflare 的 403 错误与常规 HTTP 403 错误代码并无二致&#xff0c;都表示禁止访问。这通常意味着你没有权限访问该文档。然而&#xff0c;在使用 Cloudflare 的情况下&#xff0c;当你尝试网页抓取时&#xff0c;可能会遇到这种情况&#xff0c;因为它可能表明你的 IP 地址…

【练习10】链表相加

链接&#xff1a;链表相加(二)_牛客题霸_牛客网 (nowcoder.com) 分析&#xff1a; 算法原理是逆序高精度算法 逆序的原因是为了实现从低位&#xff08;个位&#xff09;开始相加。 public class Solution {//逆序链表public ListNode reverse(ListNode head){ListNode newHead …

尤雨溪推荐的拖拽插件,支持Vue2/Vue3 VueDraggablePlus

大家好,我是「前端实验室」爱分享的了不起~ 今天在网上看到尤雨溪推荐的这款拖拽组件,试了一下非常不错,这里推荐给大家。 说到拖拽工具库,非大名鼎鼎的的 Sortablejs 莫属。它是前端领域比较知名的,且功能强大的工具。但我们直接使用Sortablejs的情况很少,一般都是使用…

java项目之基于Spring Boot智能无人仓库管理源码(springboot+vue)

项目简介 智能无人仓库管理实现了以下功能&#xff1a; 基于Spring Boot智能无人仓库管理的主要使用者分为&#xff1a; 管理员的功能有&#xff1a;员工信息的查询管理&#xff0c;可以删除员工信息、修改员工信息、新增员工信息 &#x1f495;&#x1f495;作者&#xff1a…

容器镜像同步工具image-migrator

1 概述 image-migrator是一个用于容器镜像同步的可执行二进制命令行工具&#xff08;不依赖于docker命令&#xff09;&#xff0c;能够自动将基于Docker Registry v2镜像仓库&#xff08;registry、云厂商容器镜像服务、docker hub、Quay、Harbor &#xff09;中的镜像迁移到基…

MADE A PIE 之动态树形图

MADE A PIE api地址 他那个api里的代码可以直接拿过来用&#xff0c;只是他没有写怎么使用 使用时我发现如果节点太多会导致节点名称重叠&#xff0c;所以我在他这个基础之上加了一个放大缩小和随意拖动&#xff08;dragstart&#xff0c;dragend&#xff0c;flTop&#xff0…

收银员权限-收银系统源码

收银系统对于门店来说是收银员每天日常高频使用的软件工具&#xff0c;但很多门店老板不想给收银员开放很多权限&#xff0c;如商品改价、订单打折、会员充值、订单退款等都需要门店给其开通权限或者有权限码才能操作。 1. 收银员交接班 收银系统要支持交接班&#xff0c;收银…

OJ题——迷宫问题

&#x1f36c;个人主页&#xff1a;Yanni.— &#x1f308;数据结构&#xff1a;Data Structure.​​​​​​ &#x1f382;C语言笔记&#xff1a;C Language Notes &#x1f3c0;OJ题分享&#xff1a; Topic Sharing 前言&#xff1a; 在笔试或者竞赛的过程中&#xff0c;经…

剖析 MySQL 数据库连接池(C++版)

目录 ☀️0. 前言 &#x1f324;️1. 数据库连接池概述 ⛅1.1 服务器与数据库交互 ⛅1.2 MySQL 数据库网络模型 ⛅1.3 MySQL 连接驱动安装 ⛅1.4 同步&#xff08;synchronous&#xff09;连接池与异步&#xff08;asynchronous&#xff09;连接池 ⛅1.5 同步连接池和异…

Spring 循环依赖原理及解决方案

一、什么是循环依赖 循环依赖指的是一个实例或多个实例存在相互依赖的关系&#xff08;类之间循环嵌套引用&#xff09;。 举例&#xff1a; Component public class AService {// A中注入了BAutowiredprivate BService bService; }Component public class BService {// B中也…