.CPP
#include "analogclock.h"
#include <QPainter>//添加一个绘图工具
#include <QPoint>
#include <QTimer>//添加时钟
#include <QTime>//添加时间
AnalogClock::AnalogClock(QWidget *parent)//构造函数
: QWidget(parent)
{
resize(300,300);//设置窗体大小
setWindowTitle(tr("模拟时钟"));
QTimer *timer = new QTimer(this);//新建一个定时器对象
timer->start(1000);//1000代表1000ms,即1s
connect(timer,SIGNAL(timeout()),this,SLOT(update()));//连接定时器的timeout()信号与update函数,update函数产生重绘消息,调用paintEvent
}
AnalogClock::~AnalogClock()//析构
{
}
void AnalogClock::paintEvent(QPaintEvent *)//定义重画函数
{
QPainter painter(this);//新建一个QPainter对象
QTime time = QTime::currentTime();//获取当前系统时间
//painter.drawLine(0,0,150,150);
painter.translate(150,150);//实现坐标的平移,将点(150,150)设为原点
painter.setRenderHint(QPainter::Antialiasing);//是边缘平滑
painter.setBrush(Qt::yellow);//填充颜色
painter.setPen(Qt::red);//线的颜色
painter.save();//保存坐标系状态
painter.rotate(6.0*time.second());//rotate(x)以原点为中心坐标轴顺时针旋转x度
painter.drawConvexPolygon(sed,4);//凸多边形 连接四个点
painter.restore();//恢复以前坐标系状态
painter.setBrush(Qt::black);
painter.setPen(Qt::red);
painter.save();
painter.rotate(6.0*(time.minute()+time.second()/60.0));
painter.drawConvexPolygon(min,4);
painter.restore();
painter.setBrush(Qt::red);
painter.setPen(Qt::blue);
painter.save();
painter.rotate(30.0*(time.hour()+time.second()/60.0));
painter.drawConvexPolygon(hour,4);
painter.restore();
int i;
painter.setPen(Qt::black);
for(i=0;i<60;i++){
painter.rotate(6);
painter.drawLine(0,-145,0,-148);
}
painter.setPen(Qt::red);
for(i=0;i<12;i++){
painter.rotate(30);
painter.drawLine(0,-140,0,-148);
}
}
.H
#ifndefANALOGCLOCK_H
#define ANALOGCLOCK_H
#include <QPoint>
#include <QWidget>
static QPoint sed[4]= {QPoint(0,-120),QPoint(-4,0),QPoint(0,30),QPoint(4,0)};//定义秒针四个点
static QPoint min[4] = {QPoint(0,-100),QPoint(-6,0),QPoint(0,20),QPoint(6,0)};//定义分针针四个点
static QPoint hour[4] = {QPoint(0,-80),QPoint(-8,0),QPoint(0,10),QPoint(8,0)};//定义时针四个点
class AnalogClock : public QWidget
{
Q_OBJECT
public:
AnalogClock(QWidget *parent = 0);//构造函数
~AnalogClock();//析构
protected:
void paintEvent(QPaintEvent *event);
};
#endif // ANALOGCLOCK_H
MAIN
#include <analogclock.h>
#include <QWidget>
#include <QApplication>//QApplication类管理图形用户界面应用程序的控制流和主要设置。
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
AnalogClock w;
w.show();
return a.exec();
}