analogclock.cpp

来自「一个用QT3写的模拟时钟的源码包,用于时间的显示。为那些初次用QT编程的爱好者一」· C++ 代码 · 共 81 行

CPP
81
字号
#include <QApplication>
#include "analogclock.h"
#include <QPainter>

AnalogClock::AnalogClock(QWidget *parent):QWidget(parent)
{
	QTimer *timer = new QTimer(this);
	connect(timer,SIGNAL(timeout(),this,SLOT(update())));
	timer->start(1000);
	setWindowTitle("Analog Clock");
	resize(200,200);
}

void AnalogClock::paintEvent(QPaintEvent *)
{
	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);
	}
	static const QPoint secondHand[3]={
		QPoint(7,8);
		QPoint(-7,8);
		QPoint(0,-90);
	}
	QColor hourColor(127,0,127);
	QColor minuteColor(127,127,0);
	int side=qMin(width(),height());
	QTime time=QTime::currentTime();
	QPainter painter(this);
	painter.setRenderHint(QPainter::Antialiasing);
	painter.translate(width()/2,height()/2);
	painter.scale(side/200.0,side/200.0);

	painter.setPen(QT::NoPen);
	painter.setBrush(hourColor);

	painter.save();
	painter.rotate(30.0*((time.hour()+time.minute()/60.0)));
	painter.drawConvexPolygon(hourHand,3);
	painter.restore();

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

	painter.setPen(minuteColor);

	for(int j = 0;j < 60;++j) {
		if((j%5)!=0) {
			painter.drawLine(92,0,96,0);
			painter.rotate(6,0);
		}
	}
}

int main(int argc, char *argv[])
{
	QApplication app(argc,argv);
	AnalogClock clock;
	clock.show();
	return app.exec();
	
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?