您的位置:首页 > 编程语言 > Qt开发

QT模拟时钟

2016-03-09 16:51 295 查看
.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();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: