1.
//头文件
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QPaintDevice>
#include <QTime>
#include <QTimer>
#include <QTimerEvent>
#include <QPaintEvent>
#include <QDebug>
#include <QPainter>
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 *p)override;
void timerEvent(QTimerEvent *event)override;
private:
Ui::Widget *ui;
QTimer *timer;
//计时器名字
int sadd;
};
#endif // WIDGET_H
//源文件
#include "widget.h"
#include "ui_widget.h"
int h;
int s;
int m;
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
timer = new QTimer(this);
QTime time;
s = time.currentTime().second();
h = time.currentTime().hour();
m = time.currentTime().minute();
this->startTimer(1000);
}
Widget::~Widget()
{
delete ui;
}
void Widget::paintEvent(QPaintEvent *p)
{
qDebug()<<"绘制事件触发";
//开始时画出棋盘
QPainter painter(this);
//消除锯齿
painter.setRenderHint(QPainter::Antialiasing,true);
//画笔颜色
QPen pain_pen(QColor(0,0,0));
//画笔宽度
pain_pen.setWidth(5);
//画笔起点
painter.translate(400,300);
//画家的画笔
painter.setPen(pain_pen);
//画园
painter.drawEllipse(QPoint(0,0),250,250);
for(int i=0; i<12; i++) { //粗刻度线
pain_pen.setWidth(6);
pain_pen.setColor("black");
painter.setPen(pain_pen);
painter.drawLine(QPoint(0, 230), QPoint(0, 250));
painter.rotate(30);
}
for(int i=0; i<60; i++) { //细刻度线
pain_pen.setWidth(3);
pain_pen.setColor("black");
painter.setPen(pain_pen);
painter.drawLine(QPoint(0,245), QPoint(0,240));
painter.rotate(6);
}
painter.end();
//设置三个画家以及起点和消除锯齿
//秒针
QPainter psec(this);
//设定初始位置
psec.translate(400,300);
//锯齿取消
psec.setRenderHint(QPainter::Antialiasing,true);
//设置每个时钟
qDebug()<<"paint"<<s;
//颜色
QPen sec_pen(QColor(0,0,0));
//秒针宽度
sec_pen.setWidth(1);
//绑定画家和笔
psec.setPen(sec_pen);
qDebug()<<"paint"<<s*6;
//秒针偏移量
psec.rotate(s*6);
//设定秒针长度及初始位置很重要
psec.drawLine(QPoint(0,0),QPoint(0,-150));
psec.end();
//分针
QPainter pmin(this);
//设定初始位置
pmin.translate(400,300);
//锯齿取消
pmin.setRenderHint(QPainter::Antialiasing,true);
//分针颜色
QPen min_pen(QColor(0,0,255));
//分针宽度
min_pen.setWidth(6);
//绑定画家和笔
pmin.setPen(min_pen);
qDebug()<<"paint"<<m*6+s*0.1;
//设定分针偏移量
pmin.rotate(m*6+s*0.1);
//设定分针长度及初始位置很重要
pmin.drawLine(QPoint(0,0),QPoint(0,-120));
pmin.end();
//时针
QPainter phou(this);
//设定初始位置
phou.translate(400,300);
//锯齿取消
phou.setRenderHint(QPainter::Antialiasing,true);
//时针颜色
QPen hou_pen(QColor(255,0,0));
//秒针宽度
hou_pen.setWidth(10);
//绑定画家和笔
phou.setPen(hou_pen);
qDebug()<<"paint"<<h*30+m*0.5;
//偏移大小
phou.rotate(h*30+m*0.5);
//设定时针长度及初始位置很重要
phou.drawLine(QPoint(0,0),QPoint(0,-80));
phou.end();
//让绘制事件不断的触发
update();
}
void Widget::timerEvent(QTimerEvent *event)
{
//触发这个计时器
qDebug()<<s;
s++;
if((s % 60) == 0)
{
s = 0;
m++;
if((m % 60) == 0)
{
m = 0;
h++;
if((h%12) == 0)
{
h = 0;
}
}
}
}
1点32分
2.