简单时钟:
widget.h:
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QPaintEvent>
#include <QPainter>
#include <QPen>
#include <QBrush>
#include <QtMath>
#include <QTimer>
#include <QDateTime>
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);
//自定义槽函数
void timer_slot();
private:
Ui::Widget *ui;
QTimer *timer;
QPen pen;
int second;
int minute;
int hour;
};
#endif // WIDGET_H
widget.cpp:
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//定时器实例化对象
timer = new QTimer(this);
connect(timer,&QTimer::timeout,this,&Widget::timer_slot);
//启动定时器
timer->start(1000);
}
Widget::~Widget()
{
delete ui;
}
void Widget::timer_slot(){
QDateTime time = QDateTime::currentDateTime();
QString t = time.toString("hh:mm:ss");
//提取时间
QStringList t1 = t.split(":");
hour = t1[0].toUInt();
minute = t1[1].toUInt();
second = t1[2].toUInt();
update();
}
void Widget::paintEvent(QPaintEvent *event){
//定义一个马良
QPainter painter(this);
//抗锯齿
painter.setRenderHint(QPainter::Antialiasing);
//定义一个画笔
pen.setWidth(3);
pen.setColor(Qt::green);
//马良用这个笔
painter.setPen(pen);
painter.setFont(QFont("楷体",18));
//粉刷填充颜色
QBrush back(QColor("skyblue"));
painter.setBrush(back);
//设置画笔起始位置
painter.translate(this->width()/2,this->height()/2);
//画个圆
painter.drawEllipse(QPoint(0,0),200,200);
//开始画刻度线
int val = 6;
//先转30度从小的开始画
painter.rotate(30);
for(int i = 0;i<60;i++){
//再设置一个笔
pen.setWidth(2);
pen.setColor(QColor("popur"));
painter.setPen(pen);
//总共60个刻度,每过四个小的一个大的,大刻度要写上数字
if(val%5 == 1){
painter.drawLine(QPoint(0,-200),
QPoint(0,-180));
val++;
}
else{
painter.drawLine(QPoint(0,-200),
QPoint(0,-190));
val++;
}
//每次偏移6度
painter.rotate(6);
}
//转回来
painter.rotate(-30);
//时针
pen.setWidth(5);
pen.setColor(QColor("purple"));
pen.setStyle(Qt::SolidLine);
painter.setPen(pen);
painter.rotate(hour*30+(minute*6+6*second/60)/12);
painter.drawLine(QPoint(0,0),QPoint(0,-50));
painter.rotate(-(hour*30+minute*6/12+6*second/60/12));
//分针
pen.setWidth(4);
pen.setColor(QColor("blue"));
pen.setStyle(Qt::SolidLine);
painter.setPen(pen);
painter.rotate(minute*6+second/10);
painter.drawLine(QPoint(0,-100),QPoint(0,0));
painter.rotate(-(minute*6+second/10));
//秒钟
pen.setWidth(3);
pen.setColor(QColor("green"));
pen.setStyle(Qt::SolidLine);
painter.setPen(pen);
painter.rotate(6*second);
painter.drawLine(QPoint(0,-140),QPoint(0,0));
}