头文件:
#ifndef PAINT_H
#define PAINT_H
#include <QWidget>
#include <QPaintEvent>
#include <QtDebug>
#include <QPainter>
#include <QColor>
#include <QTimer>
#include <QTime>
#include <QTimerEvent>
#include <QDateTime>
#include <QPalette>
#include <QMouseEvent>
QT_BEGIN_NAMESPACE
namespace Ui { class paint; }
QT_END_NAMESPACE
class paint : public QWidget
{
Q_OBJECT
public:
paint(QWidget *parent = nullptr);
~paint();
//重写事件处理函数
void paintEvent(QPaintEvent *event) override;
void timerEvent(QTimerEvent *event) override;
void mousePressEvent(QMouseEvent *event) override;
void mouseMoveEvent(QMouseEvent *event) override;
private:
Ui::paint *ui;
int t_id;
int hh=0,mm=0,ss=0;
//定义Qpoint类记录鼠标起始点
QPoint startPoint;
};
#endif // PAINT_H
主函数:
#include "paint.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
paint w;
w.show();
return a.exec();
}
功能函数:
#include "paint.h"
#include "ui_paint.h"
paint::paint(QWidget *parent)
: QWidget(parent)
, ui(new Ui::paint)
{
ui->setupUi(this);
t_id = this->startTimer(1000);
setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint);//去掉标题栏
setAttribute(Qt::WA_TranslucentBackground, true);//设置窗口背景透明
}
paint::~paint()
{
delete ui;
}
//定义绘制事件处理函数
void paint::paintEvent(QPaintEvent *event)
{
//实例化一个画家类
QPainter p1(this);
//给画家类设置画笔
p1.setPen(QColor(77,65,182));
//给画家设置字体
p1.setFont(QFont("华文隶书"));
//设置画家坐标起点
p1.translate(this->width()/2, this->height()/2);
//绘制矢量文字
//p1.drawText(this->width()/2, this->height()/2, "hello world");
p1.setBrush(QBrush(QColor(213,248,253)));
//画圆形
p1.drawEllipse(QPointF(0,0),200,200);
//画时刻表
p1.setPen(QColor(255,0,0));
for(int i = 0; i < 60; i ++){
p1.drawLine(200,0, 190,0);
p1.rotate(6);
}
//画小时格子
QPen pen;
pen.setWidth(3);
p1.setPen(pen);
for(int i = 1; i<= 12; i ++){
p1.rotate(30);
p1.drawLine(0,-200, 0,-185);
p1.drawText(0,-170, QString("%1").arg((i)));
}
QPainter p2(this);
p2.setPen(QColor(38,251,235));
p2.translate(this->width()/2, this->height()/2);
p2.rotate(-90);
QPen pen2;
pen2.setWidth(3);
p2.setPen(pen2);
//绘制秒针:
p2.rotate(ss*6);
p2.drawLine(0,0, 160,0);
//绘制分针:
p2.rotate(-ss*6);
p2.rotate(mm*6+ss*6/60);
p2.drawLine(0,0, 120,0);
//绘制时针:
p2.rotate(-mm*6-ss*6/60);
p2.rotate(hh*30+mm*6/12+ss*6/60/12);
p2.drawLine(0,0, 100,0);
}
void paint::timerEvent(QTimerEvent *event)
{
if(event->timerId() == t_id){
QDateTime NowTime = QDateTime::currentDateTime();
QString NowTimeString = NowTime.toString("hh:mm:ss");
QStringList list = NowTimeString.split(":");
hh = list[0].toUInt();
mm = list[1].toUInt();
ss = list[2].toUInt();
update();
}
}
void paint::mousePressEvent(QMouseEvent *event)
{
startPoint = event->globalPos() - this->frameGeometry().topLeft();
}
void paint::mouseMoveEvent(QMouseEvent *event)
{
this->move(event->globalPos() - startPoint);
}
结果如下: