QT:画一个简单的时钟(坐标系移动、坐标系旋转、保存坐标系、恢复坐标系)

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include 
#include 
#include 

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = 0);
    ~Widget();

    void paintEvent(QPaintEvent *event);
    void timerEvent(QTimerEvent *event);

private:
    int sec_count;  //秒
    int min_count;  //分

};

#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include 

Widget::Widget(QWidget *parent)
    : QWidget(parent),sec_count(0),min_count(0)
{
    setFixedSize(800,600);
    setWindowTitle("画时钟");
    startTimer(1000);
}

Widget::~Widget()
{

}
//重写绘图事件
void Widget::paintEvent(QPaintEvent *event)
{
     QPainter p(this);  //设置画布为widget
 /*
     QPoint center(width()/2,height()/2);
     p.drawEllipse(center,200,200);  //圆心,半径
     p.drawLine(center,QPoint(width()/2,height()/2-150)); //y轴向上为减
*/
     p.translate(width()/2,height()/2);  //将画图坐标系的原点移动到主窗口的中心位置
     p.drawEllipse(QPoint(0,0),200,200);      //画圆

     p.save(); //保存画家当前的坐标系

     p.rotate((++sec_count)*6);  //将画家的坐标系顺时针旋转6°
     p.drawLine(QPoint(0,0),QPoint(0,-150));  //秒针

     p.restore(); //恢复画家之前保存的坐标系

     if(sec_count%60 == 0)
     {
         ++min_count;  //秒针旋转60秒,分针+1
     }
     p.rotate(min_count*6);
     p.drawLine(QPoint(0,0),QPoint(100,0));   //分针

}
void  Widget::timerEvent(QTimerEvent *event)
{
    update();
}

结果

QT:画一个简单的时钟(坐标系移动、坐标系旋转、保存坐标系、恢复坐标系)_第1张图片QT:画一个简单的时钟(坐标系移动、坐标系旋转、保存坐标系、恢复坐标系)_第2张图片

你可能感兴趣的:(qt)