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、思维导图

相关推荐
还债大湿兄5 小时前
《C++内存泄漏8大战场:Qt/MFC实战详解 + 面试高频陷阱破解》
c++·qt·mfc
u_topian8 小时前
【个人笔记】Qt使用的一些易错问题
开发语言·笔记·qt
AI+程序员在路上9 小时前
QTextCodec的功能及其在Qt5及Qt6中的演变
开发语言·c++·qt
飞虾哥11 小时前
QT tabWidget移除页面和隐藏表头
qt
charlie11451419117 小时前
我的Qt八股文笔记2:Qt并发编程方案对比与QPointer,智能指针方案
笔记·qt·面试·刷题·并发编程·异步
小灰灰搞电子18 小时前
Qt 信号槽的扩展知识
开发语言·qt
懒羊羊大王&1 天前
5、qt系统相关
前端·qt
真的想上岸啊1 天前
学习C++、QT---25(QT中实现QCombobox库的介绍和用QCombobox设置编码和使用编码的讲解)
c++·qt·学习
赤鸢QAQ1 天前
Qt小组件 - 2(布局)瀑布流布局,GridLayout,FlowLayout
开发语言·数据库·qt
小灰灰搞电子1 天前
Qt使用dump文件记录并查找软件奔溃信息详细教程
开发语言·qt