1、时钟
- #include "widget.h"
- #include "ui_widget.h"
-
- Widget::Widget(QWidget *parent)
- : QWidget(parent)
- , ui(new Ui::Widget)
- {
- ui->setupUi(this);
-
- //给定时器指针实例化对象
- timer = new QTimer(this);
- //将该定时器的timeout信号连接到自定义槽函数中
- connect(timer, &QTimer::timeout, this, &Widget::timeout_slot);
- }
-
- Widget::~Widget()
- {
- delete ui;
- }
-
- //绘制事件处理函数的定义
- void Widget::paintEvent(QPaintEvent *event)
- {
- //实例化一个画家
- QPainter painter(this);
-
- //获取当前时间
- QTime Time = QTime::currentTime();
-
- //实例化一个画笔
- QPen pen;
- pen.setColor(QColor("hotpink")); //表盘外框颜色
- pen.setStyle(Qt::SolidLine); //设置线型:实线
- pen.setWidth(4); //线的粗细
- //将画笔给画家安排上
- painter.setPen(pen);
-
- //给画家偏移起始坐标点
- painter.translate(this->width()/2, this->height()/2);
-
- //给画家安排画刷
- painter.setBrush(QBrush(QColor("grey")));
-
- //画个圆形(时钟
- painter.drawEllipse(QPoint(0,0), 160, 160);
-
- //刻度
- for(int i=0; i<60; i++)
- {
- painter.drawLine(160,0,154,0);
- painter.rotate(6);
- }
-
- painter.setFont(QFont("隶书",14));
- //小时
- for(int i=1; i<=12; i++)
- {
- painter.rotate(30);
- painter.drawLine(0, -160, 0, -145);
- painter.drawText(-10, -125, QString("%1").arg(i));
- }
-
- painter.save();
-
- int hour = Time.hour(); // 获取当前的小时
- int minute = Time.minute(); // 获取当前的分钟
- double hourAngle = (hour%12 + minute/60.0)*30.0; // 计算时针的角度
- painter.rotate(hourAngle); // 旋转坐标系,使时针指向正确的位置
-
- QPen pen1;
- pen1.setColor(QColor("darkred")); //设置时针颜色
- pen1.setStyle(Qt::SolidLine); //实线
- pen1.setWidth(6);
-
- //将画笔给画家安排上
- painter.setPen(pen1);
- //画一条直线
- painter.drawLine(0, 0, 0, 80);
-
- painter.save();
-
- //绘制分针
- double minuteAngle = minute*6.0;
- painter.rotate(minuteAngle);
-
- QPen pen2;
- pen2.setColor(QColor("lightpink")); //设置时针颜色
- pen2.setStyle(Qt::SolidLine); //实线
- pen2.setWidth(4);
- //将画笔给画家安排上
- painter.setPen(pen2);
- painter.drawLine(0, 0, 0, 110);
-
- painter.save();
-
- //绘制秒针
- int second = Time.second();
- double secondAngle = second * 6.0;
- painter.rotate(secondAngle);
-
- QPen pen3;
- pen3.setColor(QColor("inen")); //设置时针颜色
- pen3.setStyle(Qt::SolidLine); //实线
- pen3.setWidth(2);
- //将画笔给画家安排上
- painter.setPen(pen3);
- painter.drawLine(0, 0, 0, 140);
-
- painter.restore();
-
- }
-
- void Widget::timeout_slot()
- {
- update();
- }
ui界面:

2、思维导图
