Qt-day4

1、时钟

cpp 复制代码
#include "widget.h"
#include "ui_widget.h"

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

    //给定时器指针实例化对象
    timer = new QTimer(this);
    //将该定时器的timeout信号连接到自定义槽函数中
    connect(timer, &QTimer::timeout, this, &Widget::timeout_slot);
}

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

//绘制事件处理函数的定义
void Widget::paintEvent(QPaintEvent *event)
{
    //实例化一个画家
    QPainter painter(this);

    //获取当前时间
    QTime Time = QTime::currentTime();

    //实例化一个画笔
    QPen pen;
    pen.setColor(QColor("hotpink"));   //表盘外框颜色
    pen.setStyle(Qt::SolidLine);       //设置线型:实线
    pen.setWidth(4);                   //线的粗细
    //将画笔给画家安排上
    painter.setPen(pen);

    //给画家偏移起始坐标点
    painter.translate(this->width()/2, this->height()/2);

    //给画家安排画刷
    painter.setBrush(QBrush(QColor("grey")));

    //画个圆形(时钟
    painter.drawEllipse(QPoint(0,0), 160, 160);

    //刻度
    for(int i=0; i<60; i++)
    {
        painter.drawLine(160,0,154,0);
        painter.rotate(6);
    }

    painter.setFont(QFont("隶书",14));
    //小时
    for(int i=1; i<=12; i++)
    {
        painter.rotate(30);
        painter.drawLine(0, -160, 0, -145);
        painter.drawText(-10, -125, QString("%1").arg(i));
    }

    painter.save();

    int hour = Time.hour();    // 获取当前的小时
    int minute = Time.minute();     // 获取当前的分钟
    double hourAngle = (hour%12 + minute/60.0)*30.0;  // 计算时针的角度
    painter.rotate(hourAngle);    // 旋转坐标系,使时针指向正确的位置

    QPen pen1;
    pen1.setColor(QColor("darkred"));      //设置时针颜色
    pen1.setStyle(Qt::SolidLine);               //实线
    pen1.setWidth(6);

    //将画笔给画家安排上
    painter.setPen(pen1);
    //画一条直线
    painter.drawLine(0, 0, 0, 80);

    painter.save();

    //绘制分针
    double minuteAngle = minute*6.0;
    painter.rotate(minuteAngle);

    QPen pen2;
    pen2.setColor(QColor("lightpink"));      //设置时针颜色
    pen2.setStyle(Qt::SolidLine);               //实线
    pen2.setWidth(4);
    //将画笔给画家安排上
    painter.setPen(pen2);
    painter.drawLine(0, 0, 0, 110);

    painter.save();

    //绘制秒针
    int second = Time.second();
    double secondAngle = second * 6.0;
    painter.rotate(secondAngle);

    QPen pen3;
    pen3.setColor(QColor("inen"));      //设置时针颜色
    pen3.setStyle(Qt::SolidLine);               //实线
    pen3.setWidth(2);
    //将画笔给画家安排上
    painter.setPen(pen3);
    painter.drawLine(0, 0, 0, 140);

    painter.restore();

}

void Widget::timeout_slot()
{
    update();
}

ui界面:

2、思维导图

相关推荐
用户84024097360820 小时前
使用 PyQt5 打造功能完备的 PDF 编辑器:从设计到实现全解析
qt
Quz1 天前
QML RangeSlider 组件:范围选择与双滑块样式
qt
luoyayun3611 天前
【Qt for Harmony】 Qt 5.12.12 鸿蒙版 Windows 交叉编译
qt·harmonyos·qt for harmony
秋田君1 天前
Qt_常用控件使用学习
数据库·qt·学习
wWYy.1 天前
基于Raft的分布式Kv存储项目:raft.h
开发语言·分布式·qt
茯苓gao2 天前
嵌入式开发笔记:QSerialPort 完整使用指南——从基础 API 到工程实战
笔记·嵌入式硬件·qt·学习
丁劲犇2 天前
AI辅助快速实现动态多载波PSK随机信号源
人工智能·qt·ai·sdr·多相滤波·动态生成
Quz2 天前
QML Slider 组件:基础滑块、自定义手柄、刻度标记与自定义轨道
qt
dok122 天前
zynq qt 交叉编译
开发语言·qt