Qt自带例子:AnalogClock ,增加了秒针

 

 AnalogClock_QPainter.h文件代码


#pragma once

#include <QtWidgets/QWidget>
#include "ui_AnalogClock_QPainter.h"

class AnalogClock_QPainter : public QWidget
{
	Q_OBJECT

public:
	AnalogClock_QPainter(QWidget *parent = Q_NULLPTR);

private:
	Ui::AnalogClock_QPainterClass ui;

protected:
	void paintEvent(QPaintEvent* event) override;
};

 AnalogClock_QPainter.cpp文件代码

 

#include "AnalogClock_QPainter.h"
#include <QTimer>
#include <QTime>
#include <QPainter>

AnalogClock_QPainter::AnalogClock_QPainter(QWidget *parent)
	: QWidget(parent)
{
	ui.setupUi(this);
	QTimer* timer = new QTimer(this);
	connect(timer, SIGNAL(timeout()), this, SLOT(update()));
	
	timer->start(1000);
	
	setWindowIconText(tr("Analog Clock"));
	resize(200, 200);
	

}


void AnalogClock_QPainter::paintEvent(QPaintEvent* event)
{
	static const QPoint hourHand[3] = {
		QPoint(7, 8),
		QPoint(-7, 8),
		QPoint(0, -40)
	};
	static const QPoint minuteHand[3] = {
		QPoint(7, 8),
		QPoint(-7, 8),
		QPoint(0, -70)
	};


	QColor hourColor(127, 0, 127);
	QColor minuteColor(0,127, 127, 191);

	int side = qMin(width(), height());//比较获得最小值
	QTime time = QTime::currentTime();
	
	QPainter painter(this);
	painter.setRenderHint(QPainter::Antialiasing);//渲染:抗锯齿
	painter.translate(width() / 2, height() / 2);//旋转时以(width() / 2, height() / 2)为中心
	painter.scale(side / 200.0, side / 200.0);//对画面进行缩放
	//绘画时针
	painter.setPen(Qt::NoPen);
	painter.setBrush(hourColor);

	painter.save();//保存当前painter状态,必须和restore()一起使用
	painter.rotate(30.0*(time.hour() + time.minute() / 60.0));
	painter.drawConvexPolygon(hourHand, 3);
	painter.restore();

	//12个小时线段
	painter.setPen(hourColor);
	for (int i = 0; i < 12;++i)
	{
		painter.drawLine(88, 0, 96, 0);
		painter.rotate(30.0);

	}
	//绘画分针
	painter.setPen(Qt::NoPen);
	painter.setBrush(minuteColor);
	
	painter.save();
	painter.rotate(6.0*(time.minute() + time.second() / 60.0));
	painter.drawConvexPolygon(minuteHand, 3);
	painter.restore();

	//60个分针线段
	painter.setPen(minuteColor);
	for (int j = 0; j < 60;++j)
	{
		//小时分段处不画分针线段
		if ((j % 5)!=0)
		{
			painter.drawLine(92, 0, 96, 0);
		}
		painter.rotate(6.0);
	}


	//秒针
	/////////////////////////////////////////////////////////////

	static const QPoint secondHand[3] = {
		QPoint(7, 8),
		QPoint(-7, 8),
		QPoint(0, -85)
	};
	QColor secondColor(255, 255, 0);

	painter.setPen(Qt::NoPen);
	painter.setBrush(secondColor);

	painter.save();
	painter.rotate(6.0*time.second());
	painter.drawConvexPolygon(secondHand, 3);
	painter.restore();
	///////////////////////////////////////////////////////////////

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值