小项目——时钟
代码
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//纯净化窗口
this->setWindowFlag(Qt::FramelessWindowHint);
//实例化一个定时器的空间
t=new QTimer(this);
//将timeout信号与自定义槽函数连接
connect(t,&QTimer::timeout,this,&Widget::on_timeout);
//定时器启动
t->start(1000);
//初始化hh,mm,ss 等于当前时间
//通过QTime的静态成员函数currentTime来获取当前系统时间
QTime sysTime=QTime::currentTime();
//将系统时间转变成字符串
QString time=sysTime.toString("hh:mm:ss");
//拆分字符串
QStringList list=time.split(":");
hh=list[0].toInt();
mm=list[1].toInt();
ss=list[2].toInt();
}
Widget::~Widget()
{
delete ui;
}
//鼠标按压事件
void Widget::mousePressEvent(QMouseEvent *event)
{
startpoint = event->globalPos() - this->frameGeometry().topLeft();
}
//鼠标移动事件
void Widget::mouseMoveEvent(QMouseEvent *event)
{
this->move(event->globalPos()-startpoint);
}
//处理timeout信号的槽函数定义
void Widget::on_timeout()
{
//通过QTime的静态成员函数currentTime来获取当前系统时间
QTime sysTime=QTime::currentTime();
//将系统时间转变成字符串
QString time=sysTime.toString("hh:mm:ss");
//拆分字符串
QStringList list=time.split(":");
hh=list[0].toInt();
mm=list[1].toInt();
ss=list[2].toInt();
}
void Widget::paintEvent(QPaintEvent *event)
{
// static int i=0;
// qDebug()<<i++;
//实例化一个画家类
QPainter p(this);
//给画家设置画笔
p.setPen(QColor(78,68,188));
//给画家设置字体
p.setFont(QFont("楷体"));
//p.rotate(46);
// QRectF s3(400.0,200.0,200.0,200.0);
// p.drawEllipse(s3);
//设置画家起始坐标点
p.translate(this->width()/2,this->height()/2);
//绘制矢量文字
// p.drawText(this->rect(),"hello word");
p.drawText(this->width()/2,this->height()/2,"李嘉坤真帅");
p.setBrush(QBrush(QColor("pink")));
//绘制圆
p.drawEllipse(QPointF(0,0),200,200);
//绘制圆心
p.setPen(QColor(255,0,0));
p.drawEllipse(QPointF(0,0),10,10);
//画时刻表
p.setPen(QColor(98,158,18));//换画笔的颜色
//画分的格子
for(int i =0;i<60;i++)
{
p.drawLine(200,0,190,0);
p.rotate(6);
}
//画小时格
QPen pen;
//设置宽度
pen.setWidth(3);
p.setPen(pen);
for(int i =1;i<=12;i++)
{
p.rotate(30);
p.drawLine(200,0,195,0);
p.drawText(0,-180,QString("%1").arg((i)));
}
//给画家设置画笔
p.setPen(QColor(158,93,200));
//设置宽度
//画秒针
pen.setWidth(2);
p.setPen(pen);
p.rotate(ss*6);
p.drawLine(0,0,0,-150);
//画分针
pen.setWidth(4);
p.setPen(pen);
p.rotate(-(ss*6));
p.rotate((mm*6+ss*6/60));
p.drawLine(0,0,0,-100);
//画时针
pen.setWidth(5);
p.setPen(pen);
p.rotate(-(mm*6+ss*6/60));
p.rotate(hh*30+mm*6/12+ss*6/60/12);
p.drawLine(0,0,0,-50);
update();
}
头文件
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include<QPaintEvent>
#include<QDebug>
#include<QPainter>
#include<QTimer>//定时器类的头文件
#include<QTime>//时间类的头文件
#include <QtCore/QRandomGenerator>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
int hh,mm,ss;
//绘制事件处理函数
void paintEvent(QPaintEvent *event) override;
private slots:
//定义一个处理timrout的槽函数
void on_timeout();
void mousePressEvent(QMouseEvent *event) override;
void mouseMoveEvent(QMouseEvent *event) override;
private:
Ui::Widget *ui;
//定义一个定时器类指针
QTimer *t;
QPoint point;
QPoint startpoint;
};
#endif // WIDGET_H