头文件
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QPaintEvent>
#include <QDebug>
#include <QPainter>
#include <QTimerEvent>
#include <QTimer>
#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 slots:
void timeout_slot();
private:
Ui::Widget *ui;
QTimer *timer;
double h = 0;
double m = 0;
double s = 0;
};
#endif
函数实现
#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);
connect(timer, &QTimer::timeout, this, &Widget::timeout_slot);
}
Widget::~Widget()
{
delete ui;
}
void Widget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
QPen pen;
pen.setColor(QColor("black"));
pen.setStyle(Qt::SolidLine);
pen.setWidth(7);
painter.setPen(pen);
painter.translate(this->width()/2, this->height()/2);
painter.drawEllipse(QPoint(0, 0), 200, 200);
pen.setWidth(4);
painter.setPen(pen);
for(int i = 1; i <= 60; i++)
{
painter.save();
painter.rotate(i*6);
if(!(i % 5))
{
painter.drawLine(0, -200, 0, -175);
painter.drawText(-20, -170, 40, 40, Qt::AlignHCenter | Qt::AlignTop, QString::number(i/5));
}
else
{
painter.drawLine(0, -200, 0, -190);
}
painter.restore();
}
painter.save();
pen.setColor(QColor("red"));
pen.setStyle(Qt::SolidLine);
pen.setWidth(6);
painter.setPen(pen);
painter.rotate(30*h);
painter.drawLine(0, 0, 0, -60);
painter.restore();
painter.save();
pen.setColor(QColor("green"));
pen.setStyle(Qt::SolidLine);
pen.setWidth(3);
painter.setPen(pen);
painter.rotate(6*m);
painter.drawLine(0, 0, 0, -100);
painter.restore();
painter.save();
pen.setColor(QColor("blue"));
pen.setStyle(Qt::SolidLine);
pen.setWidth(1);
painter.setPen(pen);
painter.rotate(6*(s+1));
painter.drawLine(0, 0, 0, -160);
painter.restore();
update();
}
void Widget::timeout_slot()
{
QTime time = QTime::currentTime();
h = time.hour();
m = time.minute();
s = time.second();
}