使用QT中的绘画工具与定时器工具实现简易时钟
widget.h:
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QPainter>
#include <QPaintEvent>
#include <QDebug>
#include <QTimer>
#include <QDateTime>
#include <QTime>
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;
private:
Ui::Widget *ui;
QTimer *timer;
int count = 0;
int hour;
int minute;
int second;
};
#endif // WIDGET_H
widget.c:
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//给定时器类指针实例化一个对象
timer = new QTimer(this);
timer->start(1000);
//将定时器类对象的timeout信号与自定义的槽函数进行连接
connect(timer, &QTimer::timeout, this, [&](){
count++;
update();});
//获取系统时间
QString t = QTime::currentTime().toString("HH:mm:ss");
//通过':'将字符串分割成三个部分
QStringList timelist = t.split(':');
hour = timelist[0].toUInt(); //时
minute = timelist[1].toUInt(); //分
second = timelist[2].toUInt(); //秒
}
Widget::~Widget()
{
delete ui;
}
//绘制事件定义
void Widget::paintEvent(QPaintEvent *event)
{
QPainter p(this);
//给画家准备画笔
p.setPen(Qt::blue);
p.setFont(QFont("黑体", 30));
QBrush b(QColor("gray"));
p.setBrush(b); //设置刷子
//移动画家的起始坐标
p.translate(this->width()/2,this->height()/2);
//绘制钟盘
p.drawEllipse(QPoint(0,0),250,250); //画圆
QPen pen;
for(int i = 0; i < 60; i++)
{
pen.setWidth(2);
pen.setColor(QColor("orange"));
if(i%5 == 0)
{
//绘制刻度
pen.setWidth(3);
pen.setColor(QColor("red"));
p.setPen(pen);
p.drawLine(QPoint(0,250), QPoint(0,235));
//绘制表盘上的数字
pen.setWidth(4);
pen.setColor(QColor("black"));
p.setPen(pen);
p.rotate(28);
p.setFont(QFont("黑体", 15));
p.drawText(QPoint(0,-210),QString::number(i/5+1));
p.setFont(QFont("黑体", 30));
p.rotate(-28);
}
if(i%15 == 0)
{
//绘制刻度
pen.setWidth(4);
pen.setColor(QColor("red"));
p.setPen(pen);
p.drawLine(QPoint(0,250), QPoint(0,228));
}
else
{
//绘制刻度
p.setPen(pen);
p.drawLine(QPoint(0,250), QPoint(0,235));
}
p.rotate(6);
}
//制作时针
pen.setWidth(10);
pen.setColor(QColor("red"));
p.setPen(pen);
p.rotate(30*hour+30*minute/60+6*second/60/12+6*count/60/12);
p.drawLine(QPoint(0,-80), QPoint(0,5));
//制作分针
QPainter p1(this);
p1.translate(this->width()/2,this->height()/2);
pen.setWidth(6);
pen.setColor(QColor("bule"));
p1.setPen(pen);
p1.rotate(6*minute+6*second/60+6*count/60);
p1.drawLine(QPoint(0,-140), QPoint(0,8));
//制作秒针
QPainter p2(this);
p2.translate(this->width()/2,this->height()/2);
pen.setWidth(4);
pen.setColor(QColor("green"));
p2.setPen(pen);
p2.rotate(6*second+6*count);
p2.drawLine(QPoint(0,-190), QPoint(0,8));
}
测试效果如下: