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();
}
#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();
}
相关文章推荐
- Qt国际化详细介绍
- QUdpSocket收不到回复及分析
- ubuntu技巧--ubuntu Qt Creator debug
- Qt控制台输出QString
- Qt编写串口通信程序 讲解
- 在Ubuntu下安装Qt creator 5
- QT5串口通信
- Ubuntu下 嵌入式Qt开发环境的搭建--转载
- Exposing Qt's Q_ENUMS to QML
- Qt无法输入中文问题解决
- QT中各种MessageBox的使用
- qt
- 学习记录-Qt读取条码扫描枪
- QT-QMainWindow布局设置
- Qt:parent参数
- Qt中ioctl
- QT4.8.6静态编译
- 关于Qt调用多个.m文件形成的函数问题。
- Win7 Qt4.8.5+QtCreator2.8.0+mingw配置过程
- Qt5官方demo解析集21——Extending QML - Adding Types Example