头文件
#ifndef MYWIDGET_H
#define MYWIDGET_H
#include <QWidget>
#include <QPaintEvent>
#include <QDebug>
#include <QPainter>
#include <QTime>
#include <QTimer>
#include <QMouseEvent>
QT_BEGIN_NAMESPACE
namespace Ui { class myWidget; }
QT_END_NAMESPACE
class myWidget : public QWidget
{
Q_OBJECT
public:
myWidget(QWidget *parent = nullptr);
~myWidget();
void paintEvent(QPaintEvent *event) override;
private:
Ui::myWidget *ui;
void mousePressEvent(QMouseEvent *event) override;
int t_id;
void timerEvent(QTimerEvent *event) override;
QTimer *t;
};
#endif
源代码
#include "mywidget.h"
#include "ui_mywidget.h"
myWidget::myWidget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::myWidget)
{
ui->setupUi(this);
}
myWidget::~myWidget()
{
delete ui;
t = new QTimer(this);
t->start(1000);
connect(t, SIGNAL(timeout()), this, SLOT(update()));
}
void myWidget::paintEvent(QPaintEvent *event)
{
QPainter p(this);
p.setPen(QColor(77,65,182));
p.setFont(QFont("Consolas"));
p.translate(this->width()/2,this->height()/2);
p.setBrush(QBrush(QColor(250,240,230)));
p.drawEllipse(QPoint(0, 0),200,200);
p.setPen(QColor("black"));
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(0,200, 0,185);
p.rotate(-2);
p.drawText(0,-170,QString("%1").arg(i));
p.rotate(2);
}
QTime sysTime = QTime::currentTime();
QString time_str = sysTime.toString();
int hh,mm,ss;
QStringList list_time = time_str.split(":");
hh = list_time[0].toUInt();
mm = list_time[1].toUInt();
ss = list_time[2].toUInt();
p.setPen(QPen(QColor("green"), 2));
p.rotate(ss*6);
p.drawLine(QPoint(0,-190),QPoint(0,5));
p.rotate(-(ss*6));
p.setPen(QPen(QColor("blue"), 2));
p.rotate(mm*6 + ss*6/60);
p.drawLine(QPoint(0,-120),QPoint(0,5));
p.rotate(-(mm*6 + ss*6/60));
p.setPen(QPen(QColor("magenta"), 2));
p.rotate(hh*30 + mm*6/12 + ss*6/60/12);
p.drawLine(QPoint(0,-120),QPoint(0,5));
p.rotate(-(hh*30 + mm*6/12 + ss*6/60/12));
update();
}
void myWidget::mousePressEvent(QMouseEvent *event)
{
t_id = this->startTimer(1000);
}
void myWidget::timerEvent(QTimerEvent *event)
{
if(event->timerId() == t_id)
{
QDateTime sysDate = QDateTime::currentDateTime();
QString date_str = sysDate.toString("yyyy-MM-dd hh:mm:ss");
QString time_str = sysDate.toString("hh:mm:ss");
ui->label_show->setText(date_str);
QFont ft;
ft.setPointSize(12);
ui->label_show->setFont(ft);
int hh,mm,ss;
QStringList list_date = time_str.split(":");
hh = list_date[0].toUInt();
mm = list_date[1].toUInt();
ss = list_date[2].toUInt();
}
}
运行结果