代码
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
time = new QTimer(this);
time->start(1000);
connect(time,&QTimer::timeout,[&]{
update();
});
}
Widget::~Widget()
{
delete ui;
}
//定义绘制时间处理函数
void Widget::paintEvent(QPaintEvent *event)
{
//实例化一个画家类
QPainter p(this);
//给画家设置画笔
p.setPen(QColor(74,141,141));
//给画家设置字体
p.setFont(QFont("华文楷书"));
//设置画家坐标起点
p.translate(this->width()/2,this->height()/2);
//绘制矢量文字
p.drawText(this->rect(),"Hello World"); //放到最顶部
p.drawText(this->width()/2,this->height()/2,"朱军大帅比");
// p.rotate(45); //设置画家的旋转角度
p.setBrush(QBrush(QColor(74,141,141)));
//画圆形
p.drawEllipse(QPointF(0,0),200,200);
//画时刻表
p.setPen(QColor(255,0,0));
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=0;i<12;i++)
{
p.rotate(30);
p.drawText(0,-173,QString("%1").arg(i+1));
p.drawLine(0,200,0,180);
}
//获取时间
QDateTime time = QDateTime::currentDateTime();
//将时间转化成字符串
QString t = time.toString("HH:mm:ss");
//分离时间
QStringList timelist = t.split(':');
hour = timelist[0].toUInt();
minute = timelist[1].toUInt();
second = timelist[2].toUInt();
//时针
pen.setWidth(25);
p.setPen(QColor("red"));
p.rotate(hour*30+minute*0.5+second*0.0083);
p.drawLine(0,0,0,-100);
p.rotate(-(hour*30+minute*0.5+second*0.0083));
//分针
pen.setWidth(20);
p.setPen(QColor("yellow"));
p.rotate(minute*6+second*0.1);
p.drawLine(0,0,0,-120);
p.rotate(-(minute*6+second*0.1));
//秒针
pen.setWidth(15);
p.setPen(QColor("blue"));
p.rotate(second*6);
p.drawLine(0,0,0,-160);
qDebug() << hour << ":" << minute << ":" << second;
}
头文件
#include <QTimer>
#include <QTimerEvent>
#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) override;
private:
Ui::Widget *ui;
QTimer *time;
int hour;
int minute;
int second;
};
#endif // WIDGET_H