#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
startTimer(1000);
}
Widget::~Widget()
{
delete ui;
}
void Widget::paintEvent(QPaintEvent *event)
{
/********************表盘**********************/
QPainter p(this);
p.setRenderHint(QPainter::Antialiasing);
QPen pen;
pen.setStyle(Qt::SolidLine);
pen.setColor(QColor("black"));
pen.setWidth(5);
p.save();
p.setPen(pen);
p.translate(this->width()/2, this->height()/2); // 起点
QBrush brush(QColor(255, 236, 190));
p.setBrush(brush);
p.drawEllipse(QPoint(0, 0), 200, 200);
for(int i = 0; i < 12; i++) {
double angle = -i*30+90;
double radian = qDegreesToRadians(angle); // 将角度转换为弧度
int x = 160 * cos(radian);
int y = 160 * sin(radian);
QFont font("Arial", 10);
p.setFont(font);
QString numberText = QString::number(i == 0 ? 12 : i); // 处理数字 12
QRect textRect(QPoint(x - 10, -y - 10), QSize(20, 20)); // 创建一个矩形区域用于对齐
p.drawText(textRect, Qt::AlignCenter, numberText); // 绘制数字
}
for(int i=0; i<60; i++) {
if(i%5 == 0) {
pen.setWidth(5);
p.setPen(pen);
p.drawLine(QPoint(190, 0), QPoint(200, 0));
}
else {
pen.setWidth(3);
p.setPen(pen);
p.drawLine(QPoint(195, 0), QPoint(200, 0));
}
p.rotate(6);
}
// 当前时间
double totalHours = QDateTime::currentDateTime().time().hour();
double totalMinutes = QDateTime::currentDateTime().time().minute();
double totalSeconds = QDateTime::currentDateTime().time().second();
/********************时针**********************/
QPainter p_h(this);
p_h.setRenderHint(QPainter::Antialiasing);
p_h.translate(this->width()/2, this->height()/2); // 起点
QPen pen_h;
pen_h.setStyle(Qt::SolidLine);
pen_h.setColor(QColor("red"));
pen_h.setWidth(8);
p_h.setPen(pen_h);
p_h.rotate((totalHours+totalMinutes/60+totalMinutes/3600)*30-90); // 时针偏移
p_h.drawLine(QPoint(0, 0), QPoint(70, 0));
/********************分针**********************/
QPainter p_m(this);
p_m.setRenderHint(QPainter::Antialiasing);
p_m.translate(this->width()/2, this->height()/2); // 起点
QPen pen_m;
pen_m.setStyle(Qt::SolidLine);
pen_m.setColor(QColor("blue"));
pen_m.setWidth(5);
p_m.setPen(pen_m);
p_m.rotate((totalMinutes+totalSeconds/60)*6-90); // 分针偏移
p_m.drawLine(QPoint(0, 0), QPoint(100, 0));
/********************秒针**********************/
QPainter p_s(this);
p_s.setRenderHint(QPainter::Antialiasing);
p_s.translate(this->width()/2, this->height()/2); // 起点
QPen pen_s;
pen_s.setStyle(Qt::SolidLine);
pen_s.setColor(QColor("green"));
pen_s.setWidth(3);
p_s.setPen(pen_s);
p_s.rotate(totalSeconds*6-90); // 秒针偏移
p_s.drawLine(QPoint(0, 0), QPoint(130, 0));
}
void Widget::timerEvent(QTimerEvent *event)
{
update();
}
思维导图: