提示:一个简易的时钟控件
前言
简单的实现了一个时钟控件,功能比较单调;
一、时钟控件是什么?
控件是指对数据和方法的封装,而时钟控件就是封装了一个时钟功能的类,可以达到时钟的功能;
二、演示代码
1.结果演示
本控件默认设置从0点开始,后续功能待自行发挥
2.结构代码
myclock.h:
#include <QWidget>
#include <QPaintEvent>
#include <QPainter> //绘图方法
#include <QPen> //绘图工具、画笔
#include <QBrush> //绘图工具、画刷
#include <QtMath>
#include <QTimer>
class MyClock : public QWidget
{
Q_OBJECT
public:
explicit MyClock(QWidget *parent = nullptr);
void paintEvent(QPaintEvent *event); //重写绘图事件
QTimer *time; //设置一个定时器
int flag; //设置一个标志
};
myclock.c:
#include "myclock.h"
MyClock::MyClock(QWidget *parent) : QWidget(parent)
{
setFixedSize(1000,1000);
//刷新绘图事件
update();
time = new QTimer; //初始化定时器
flag = 0; //初始化标志
//正常速度
// time->start(1000);
//调试速度
time->start(10);
/****************关联定时器信号************************/
connect(time, SIGNAL(timeout()), this, SLOT(update()));
}
void MyClock::paintEvent(QPaintEvent *event)
{
QPainter p(this);
QPen pen(Qt::LinearGradientPattern);
/*****************画时钟外圆和内部背景**********************/
pen.setColor("yellow");
pen.setWidth(20);
p.setPen(pen);
p.setBrush(QBrush( QColor("pink"), Qt::Dense1Pattern) );
p.drawEllipse(QPoint(500,500), 450, 450);
/****************画时钟的刻度******************************/
pen.setColor("black");
pen.setWidth(4);
p.setPen(pen);
for(int i = 0 ; i < 60 ; i++)
{
int x_start, y_start, x_end, y_end;
if(i%5 == 0) //画大刻度
{
x_start = 500 + sin(i * M_PI / 30) * 380;
x_end = 500 + sin(i * M_PI / 30) * 450;
y_start = 500 + cos(i * M_PI / 30) * 380;
y_end = 500 + cos(i * M_PI / 30) * 450;
}else{ //画小刻度
x_start = 500 + sin(i * M_PI / 30) * 430;
x_end = 500 + sin(i * M_PI / 30) * 450;
y_start = 500 + cos(i * M_PI / 30) * 430;
y_end = 500 + cos(i * M_PI / 30) * 450;
}
p.drawLine(QPoint(x_start, y_start), QPoint(x_end, y_end));
}
QPen pen1(Qt::LinearGradientPattern);
/********************画秒针********************/
int x1 = 500 + sin(flag * M_PI / 30) * 355;
int y1 = 500 - cos(flag * M_PI / 30) * 355;
QPainter p1(this);
pen1.setColor("green");
pen1.setWidth(6);
p1.setPen(pen1);
p1.drawLine(QPoint(500, 500), QPoint(x1, y1));
/*******************画分针************************/
int x2 = 500 + sin(flag * M_PI / (30 * 60)) * 220;
int y2 = 500 - cos(flag * M_PI / (30 * 60)) * 220;
QPainter p2(this);
pen1.setColor("purple");
pen1.setWidth(9);
p2.setPen(pen1);
p2.drawLine(QPoint(500, 500), QPoint(x2, y2));
/**********************画时针************************/
int x3 = 500 + sin(flag * M_PI / (30 * 60 * 12)) * 100;
int y3 = 500 - cos(flag * M_PI / (30 * 60 * 12)) * 100;
QPainter p3(this);
pen1.setColor("red");
pen1.setWidth(12);
p3.setPen(pen1);
p3.drawLine(QPoint(500, 500), QPoint(x3, y3));
/**************每过一秒让标志加一从而改变时分秒针的角度*************/
flag++;
}
总结
以上就是简单的时针控件的代码分享,本文仅仅简单实现了一个时钟控件,而和真实的时针有部分差距,后续内容就看大家自由发挥了。