基于QT的时钟表盘设计
基于QT设计根据电脑本地时间的时钟,要求具有时针,分针,秒针,而且根据时间产生对应的偏移
头文件
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QPainter>
#include <QPaintEvent>
#include <QDebug>
#include <QTimerEvent>
#include <QTime>
#include <QTimer>
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 *time;
QTime t;
int hour;
int minute;
int second;
};
#endif // WIDGET_H
源文件
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//初始化实时绘制时钟连接
//初始化时钟与画家
time = new QTimer(this);
connect(time,&QTimer::timeout,[&](){update();});
time->start(1000);
}
Widget::~Widget()
{
delete ui;
}
//定义画板
void Widget::paintEvent(QPaintEvent *event)
{
//准备画笔
QPainter p(this);
p.setPen(Qt::black);
p.setFont(QFont("楷书",15));
//偏移画笔到ui中央
p.translate(this->width()/2,this->height()/2);
//给刷子上色
QBrush b(QColor("yellow"));
p.setBrush(b);
//画表盘
p.drawEllipse(QPoint(0,0),180,180);
//画刻度
//修改画笔宽度
p.setPen(QPen(Qt::black,3));
int j = 6;
for(int i=0;i < 60;i++)
{
//画长短刻度
if(i%5 == 0)
{
p.drawLine(QPoint(0,180),QPoint(1,165));
p.drawText(QPoint(-9,160),QString::number(j));
if(j+1 > 12)
j = 0;
j++;
}else
{
p.drawLine(QPoint(0,180),QPoint(1,175));
}
p.rotate(6);
}
qDebug()<<"hello";
//获取时间
t = QTime::currentTime();
//将时间转换成数值,按数值调整时分秒针
QString t_s = t.toString("HH:mm:ss");
QStringList timelist = t_s.split(":");//用:将字符串分割成3部分
quint8 hour = timelist[0].toUInt();//将字符串转换成无符号整数
quint8 minute = timelist[1].toUInt();
quint8 second = timelist[2].toUInt();
//设置画笔属性
p.setPen(QPen(Qt::red,9));//时针
p.rotate(hour*30+6*second/60/12+30*minute/60);
p.drawLine(QPoint(0,-50),QPoint(0,5));
p.rotate(-(hour*30+6*second/60/12+30*minute/60));
p.setPen(QPen(Qt::blue,9));//分针
p.rotate(6*second/60+6*minute);
p.drawLine(QPoint(0,-70),QPoint(0,7));
p.rotate(-(6*second/60+6*minute));
p.setPen(QPen(Qt::green,9));//秒针
p.rotate(6*second);
p.drawLine(QPoint(0,-100),QPoint(0,9));
qDebug() <<hour<<":"<<minute<<":"<<second;
}
main文件
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
实现效果
