QT实现钟表

1、

头文件

复制代码
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QPaintEvent>           //绘制事件类
#include <QDebug>               //信息调试类
#include <QPainter>              //画家类
#include <QTimerEvent>             //定时器事件处理类
#include <QTime>
#include <QTimer>            //定时器类
#include <QDateTime>            //日期时间类


QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

    //重写绘制事件处理函数
    void paintEvent(QPaintEvent *event) override;

private:
    Ui::MainWindow *ui;

    //定义一个定时器的对象指针
    QTimer *timer;
};
#endif // MAINWINDOW_H
复制代码
源文件
复制代码
#include "mainwindow.h"
#include "ui_mainwindow.h"

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

    //给定时器指针实例化对象
    timer = new QTimer(this);

    timer->start(1000);  //一秒钟

    //将该定时器的timeout信号连接到自定义槽函数中
    connect(timer, SIGNAL(timeout()), this, SLOT(update()));

}

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

void MainWindow::paintEvent(QPaintEvent *event)
{
    //实例化一个画家
    QPainter painter(this);

    //实例化一个画笔
    QPen pen;
    pen.setColor(QColor("black"));  //将画笔设置成黑色
    pen.setStyle(Qt::SolidLine);  //设置线型
    pen.setWidth(5);  //设置画笔的粗细

    //将画笔给画家安排上
    painter.setPen(pen);

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

    //给画家偏移坐标系
    painter.rotate(0);  //也就是旋转

    //填充图形内的颜色(刷子)
    painter.setBrush(QBrush(QColor("skyblue")));

    //画个圆形
    painter.drawEllipse(QPoint(0,0), 200,200);  //QPoint(0,0)为起始位置

    //画出表盘
    for(int i=1;i<=60;i++)
    {
        painter.rotate(6);
        painter.drawLine(0,195,0,200);
    }
    //painter.rotate(0);
    for(int i=1;i<=12;i++)
    {
        painter.rotate(30);
        painter.drawLine(0,190,0,200);

    }

    QTime sys_t = QTime::currentTime();
    //时针
    painter.save();  //保存
    pen.setColor(QColor("green"));  //将画笔设置成绿色
    painter.setPen(pen);
    painter.rotate(6*sys_t.second());
    painter.drawLine(0,0,0,150);
    //分针
    painter.restore();
    painter.save();
    pen.setColor(QColor("blue"));  //将画笔设置成蓝色
    painter.setPen(pen);
    painter.rotate(6*(sys_t.minute()+sys_t.second()/60));
    painter.drawLine(0,0,0,120);
    //秒针
    painter.restore();
    painter.save();
    pen.setColor(QColor("red"));  //将画笔设置成红色
    painter.setPen(pen);
    painter.rotate(30*((sys_t.hour()+sys_t.minute()/60)));
    painter.drawLine(0,0,0,90);

}
复制代码
主函数
复制代码
#include "mainwindow.h"

#include <QApplication>

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

2、思维导图

相关推荐
橙子家14 小时前
AI Coding 开发环境搭建【Claude Code + CC Switch + VS Code】
其他
物联网软硬件开发-轨物科技15 小时前
【轨物方案】从五维感知到一键顺控:箱变智能化不是一个传感器能解决的事
人工智能·科技·其他·机器人·开源
kangqishiye16 小时前
精密制造升级推动功能性擦拭布技术革新
其他
迪康Defender1 天前
从静态存储到动态流转:终端透明加密两种模式实战解析
运维·服务器·网络·数据库·其他
shunjinnuantong1 天前
如何选择合适的螺旋风管材质?
其他·材质
jikemaoshiyanshi2 天前
游戏出海企业想用 Agentic BI 分析 ROI、LTV 和投放异常,哪些云上数据与 AI 平台更适合?
其他
FENRON3 天前
艺术涂料品牌怎么选?从五个维度拆解筛选逻辑
经验分享·笔记·其他
Ztt6666666663 天前
荷口花瓶从瓶口开出一朵花
笔记·其他·百度·微信公众平台·微信开放平台
邵老师讲教育3 天前
2026年实测:6大宁波数学小升初机构综合评测
其他
执欣之手3 天前
Mnemi Beyst
其他