Qt时钟练习

Qt是时钟练习就是对事件简单的使用:

Widget类头文件

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QTimer>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

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

protected:
    void paintEvent(QPaintEvent *event);
public slots:
    void slotTimer();

private:
    Ui::Widget *ui;
    int m_value;
    int m_second;
    int m_minute;
    int m_hour;
};

#endif // WIDGET_H

Widget类的具体实现:

#include "widget.h"
#include "ui_widget.h"

#include <QPainter>
#include <QPaintEvent>
#include <QDebug>
#include <QTimer>
#include <QTime>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    QTime time = QTime::currentTime();
    m_hour = time.hour();
    m_second = time.second();
    m_minute = time.minute();
    QTimer *timer = new QTimer(this);
    connect(timer, SIGNAL(timeout()), this, SLOT(slotTimer()));
    timer->start(1000);
}

Widget::~Widget()
{
    delete ui;
}

void Widget::paintEvent(QPaintEvent *)
{
    QPainter p(this);
    p.drawPixmap(rect(), QPixmap("../image/001.jpg"));
    int extent;
    if (width()>height())
        extent = height()-20;
    else
        extent = width()-20;
    p.translate((width()-extent)/2, (height()-extent)/2);
    p.setPen(Qt::white);
    p.setBrush(Qt::black);
    p.drawEllipse(0, 0, extent, extent);
    p.translate(extent/2, extent/2);
    QFont font("TypeWriter");
    font.setPixelSize(extent*0.08);
    p.setFont(font);
    p.setFont(font);
    p.drawText(extent*0.32,extent*0.03,"3");
    p.drawText(-extent*0.02,extent*0.35,"6");
    p.drawText(-extent*0.36,extent*0.03,"9");
    p.drawText(-extent*0.04,-extent*0.30,"12");
 //*******************绘画秒针*************************//
    p.save();
    for(int angle=0; angle<=+ 360; angle+=30)
    {
        p.save();
        p.rotate(angle);
        p.setPen(Qt::white);
        for(int i = angle - 30; i < angle; i+=6)
        {
            p.rotate(6);
            p.drawLine(extent*0.45, 0, extent*0.48, 0);
        }
        QPen op(Qt::white, 4);
        p.setPen(op);
        p.drawLine(extent*0.4, 0, extent*0.48, 0);

        p.restore(); //restore函数保存当前绘制好的画家,并返回初始位置
    }
    //////////////////绘制时针////////////////////////
    p.rotate(m_hour * 30 + m_minute / 2  - 90);
    QPolygon polygon;
    //polygon << QPoint(-extent*0.05, extent*0.05) << QPoint(-extent*0.05, -extent*0.05) << QPoint(extent*0.46, 0);
    QPen pen1(Qt::white,4);
    //p.setPen(Qt::NoPen);
    p.setPen(pen1);
    p.setBrush(QColor(255,0,0,120));
    //p.drawPolygon(polygon);
    p.drawLine(0, 0, extent * 0.27, 0);

    ////////////////绘制分针/////////////////////////
    QPainter p2(this);
    p2.translate((width()-extent)/2, (height()-extent)/2);
    p2.translate(extent/2, extent/2);
    QPen pen3(Qt::white, 4);
    p2.setPen(pen3);
    p2.setBrush(QColor(255,0,0,120));
    p2.rotate(m_minute * 6 - 90);
    p2.drawLine(0, 0, extent * 0.36, 0);

    ////////////////绘制秒针///////////////////
    QPainter p3(this);
    p3.translate((width()-extent)/2, (height()-extent)/2);
    p3.translate(extent/2, extent/2);
    QPen pen2(Qt::white, 2);
    p3.setPen(pen2);
    p3.setBrush(QColor(255,0,0,120));
    p3.rotate(m_second * 6 - 90);
    p3.drawLine(0, 0, extent * 0.40, 0);
}

void Widget::slotTimer()
{
    qDebug() << "time slot:" ;
    m_second++;
    if(m_second == 60)
    {
        m_second = 0;
        m_minute++;
        if(m_minute == 60)
        {
            m_minute = 0;
            m_hour++;
        }
    }
    this->update();
}

效果展示:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Star星屹程序设计

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值