zoukankan      html  css  js  c++  java
  • QT-Demo-Colck-01

    1 QT += widgets
    2 QT += core
    3 
    4 HEADERS += 
    5     mainwindow.h
    6 
    7 SOURCES += 
    8     mainwindow.cpp 
    9     main.cpp
    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    
    #include <QWidget>
    
    class Clock : public QWidget
    {
        Q_OBJECT //每个从QT继承的类都添加这个宏定义
    public:
        Clock(QWidget* parent = 0);//默认父对象为0,也就是当前窗口为顶级窗口
    protected:    
        void paintEvent(QPaintEvent* e) Q_DECL_OVERRIDE;//只要是覆盖就推荐使用该宏定义
    };
    
    #endif // MAINWINDOW_H
    #include "mainwindow.h"
    #include <QTimer>
    #include <QPoint>
    #include <QColor>
    #include <QTime>
    #include <QPainter>
    
    //默认参数只在申明时写,定义时不写,将默认参数传递给基类QWidget
    Clock::Clock(QWidget *parent):QWidget(parent)
    {
        QTimer* timer = new QTimer(this);//定时器
        
        //每隔一定时间刷新界面
        connect(timer,SIGNAL(timeout()),this,SLOT(update()));
        
        timer->start(1000);
        
        setWindowTitle(tr("小小时钟"));
        
        resize(200,200);
    }
    
    //没有使用到形参,那么定义的时候就不需要指明形参名字
    void Clock::paintEvent(QPaintEvent *)
    {
        //三点围成一个时针
        const QPoint hourPoint[3]=
        {
            QPoint(7,7),
            QPoint(-7,7),
            QPoint(0,-60)
        };
        //三点围成一个分针
        const QPoint minPoint[3]=
        {
            QPoint(7,7),
            QPoint(-7,7),
            QPoint(0,-70)
        };
        //三点围成一个秒针
        const QPoint secPoint[3]=
        {
            QPoint(7,7),
            QPoint(-7,7),
            QPoint(0,-80)
        };
        //分别定义时分秒针的颜色和透明度
        QColor hourColor(125,0,125);
        QColor minColor(0,125,125,200);
        QColor secColor(255,0,0);
        
        //获取窗体的宽和高的函数首字母是小写
        int side = qMin(width(),height());
        
        //获取当前时间
        QTime time = QTime::currentTime();
        
        //创建画家
        QPainter painter(this);
        
        //抗锯齿
        painter.setRenderHint(QPainter::Antialiasing);
        
        //将坐标移动到客户区中间
        painter.translate(width()/2,height()/2);
        
        //设置刻度单位为较短的一边的长度的200分之1
        //一定要记得加小数点,否则内面小于200时,就会单位刻度为0
        painter.scale(side/200.0,side/200.0);
        
        //设置画笔和画刷
        painter.setPen(Qt::NoPen);
        painter.setBrush(hourColor);
        
        //保存画家,和restore()成对使用,保存还没有旋转的画家
        painter.save();
        //旋转坐标轴
        painter.rotate( 30*(time.hour()+time.minute()/60.0) );
        
        //画多边形
        painter.drawConvexPolygon(hourPoint,3);
        
        //还原画家,和save()成对使用,还原到还没有旋转的画家
        painter.restore();
        
        //设置画笔,用来画小时刻度
        painter.setPen(hourColor);
        
        //旋转12次画小时刻度
        for(int i=0;i<12;i++)
        {
            painter.drawLine(99,0,90,0);
            painter.rotate(30);
        }
        
        //设置分钟,画刷,画笔
        painter.setPen(Qt::NoPen);
        painter.setBrush(minColor);
        
        //保存旋转之前的画家
        painter.save();
        
        //通过旋转坐标轴画分针
        painter.rotate(6*(time.minute()+time.second()/60.0));
        painter.drawConvexPolygon(minPoint,3);
        
        //还原画家到未旋转的状态
        painter.restore();
        
        //设置画笔颜色,用来画分钟刻度
        painter.setPen(minColor);
        
        //通过旋转60次画分钟刻度
        for(int i=0;i<60;i++)
        {
            if(i%5!=0)
                painter.drawLine(99,0,95,0);
            painter.rotate(6);
        }
        
        //设置画笔画刷,用来画秒针
        painter.setPen(Qt::NoPen);
        painter.setBrush(secColor);
        
        //保存未旋转的画家
        painter.save();
        
        //旋转坐标轴用来画秒针
        painter.rotate(6*time.second());
        painter.drawConvexPolygon(secPoint,3);
        
        //还原画家到未旋转的状态
        painter.restore();
    }
    #include <QApplication>
    #include "mainwindow.h"
    
    int main(int argc , char* argv[])
    {
        QApplication app(argc ,argv);
        
        Clock clock ;
        clock.show();
        
        return app.exec();
        
    }
  • 相关阅读:
    linux 创建python虚拟环境
    dic1.update(dic2)和{**dic2, **dic1}的区别
    redis
    电脑开机一卡一卡的,重启就好了
    股东大会和董事会的区别
    word空白框打钩
    计划资产回报
    成本法为什么要转权益法
    租赁负债
    AIDA64序列号
  • 原文地址:https://www.cnblogs.com/shiyumiao/p/5497991.html
Copyright © 2011-2022 走看看