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

相关推荐
progalchemist2 天前
Quick SwiftObjective-C测试框架入门教程
开发语言·其他·objective-c·swift
zhangzelin8883 天前
TypeScript入门指南:JavaScript的类型化超集
前端·javascript·其他·typescript
livana.3 天前
小学scrach入门项目学习幸运大转盘项目
经验分享·学习·其他·scratch
白璽-寰宇光锥舟3 天前
【寰宇光锥舟】
其他
SccTsAxR4 天前
[初学C语言]关于scanf和printf函数
c语言·开发语言·经验分享·笔记·其他
sitellla4 天前
Testify Go测试工具包入门教程
git·测试工具·其他·golang
牛马的人生6 天前
MATLAB模块库入门:提升你的工程分析效率
开发语言·其他·matlab
ps_xiaowang6 天前
React Query入门指南:简化React应用中的数据获取
前端·其他·react native·react.js
alphacoder1237 天前
RollupJavaScript模块打包器入门教程
其他
牛马的人生7 天前
GitLab入门教程:打开DevOps全流程的大门
运维·其他·gitlab·devops