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();
	///////////////////////////////////////////////////////////////

}

 

發佈了5 篇原創文章 · 獲贊 0 · 訪問量 95
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章