实现一个时钟

头文件

cpp 复制代码
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include<QPainter>//画家类
#include<QTime>//时间类
#include<QTimer>//定时器类

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
    void timeout_slot();
    void paintEvent(QPaintEvent *event) override;

private:
    Ui::Widget *ui;
    QTimer q;
    int h=0,m=0,s=0;
};
#endif // WIDGET_H

源文件

cpp 复制代码
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    this->resize(500,500);
    q.start(1000);
    connect(&q,&QTimer::timeout,this,&Widget::timeout_slot);
}

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

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter maliang(this);
    QPen pen;
    pen.setStyle(Qt::SolidLine);
    pen.setColor(QColor("red"));
    maliang.setBrush(QColor("skyblue"));
    pen.setWidth(10);
    maliang.setPen(pen);
    //maliang.drawEllipse(250,250,100,100);
    maliang.translate(QPoint(250,250));
    maliang.drawEllipse(QPoint(0,0),150,150);
    for(int i=0;i<12;i++)
        {
            maliang.rotate(30);
            maliang.drawLine(QPoint(0,130),QPoint(0,150));
        }
    for(int i=0;i<60;i++)
    {
        pen.setWidth(4);
        maliang.setPen(pen);
        maliang.rotate(6);
        maliang.drawLine(QPoint(0,140),QPoint(0,150));
    }
    for(int i=0;i<12;i++)
    {
        static int num=1;
        QString str=QString::number(num);
        maliang.rotate(30);
        maliang.drawText(QPoint(0,-110),str);
        if(num==0)
        {
            num=12;

        }
        if(num>=12)
        {
            num=num-12;

        }
        num++;

    }
    QPainter maliang1(this);
    maliang1.translate(QPoint(250,250));
    QPen pen1;
    pen1.setColor(QColor("green"));
    pen1.setWidth(12);
    maliang1.setPen(pen1);
    maliang1.rotate(h*30);
    maliang1.drawLine(QPoint(0,0),QPoint(0,-80));


    QPainter maliang2(this);
    maliang2.translate(QPoint(250,250));
    QPen pen2;
    pen2.setColor(QColor("yellow"));
    pen2.setWidth(8);
    maliang2.setPen(pen2);
    maliang2.rotate(m*6);
    maliang2.drawLine(QPoint(0,0),QPoint(0,-90));

    QPainter maliang3(this);
    maliang3.translate(QPoint(250,250));
    QPen pen3;
    pen3.setColor(QColor("black"));
    pen3.setWidth(6);
    maliang3.setPen(pen3);
    maliang3.rotate(s*6);
    maliang3.drawLine(QPoint(0,0),QPoint(0,-100));
    this->update();











}
void Widget::timeout_slot()
{
    QTime systime=QTime::currentTime();
    h=systime.hour();
    if(h>12)
    {
        h=h-12;

    }else if(h==24)
    {
        h=12;
    }
    m=systime.minute();
    s=systime.second();

}

头文件

cpp 复制代码
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include<QTime>
#include<QTimer>
#include<QMessageBox>
#include <QTextToSpeech>
#include<qstring.h>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
    void timeout_slot();
     void timerEvent(QTimerEvent *event)override;

private slots:
    //void on_label_linkActivated(const QString &link);

    void on_pushButton_clicked();

private:
    Ui::Widget *ui;
     QTimer *objtimer;
     int eventtimeid;
     int clocktimeid;
     QTextToSpeech *speecher;
     int btn;
};
#endif // WIDGET_H

源文件

cpp 复制代码
#include "widget.h"
#include "ui_widget.h"
#include<qdebug.h>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
     QTimer *objtimer;
     objtimer=new QTimer(this);


    connect(objtimer,&QTimer::timeout,this,&Widget::timeout_slot);
    objtimer->start(1000);
    //eventimeid=this->startTimer(1000);
    timeout_slot();
    speecher = new QTextToSpeech(this);


}

Widget::~Widget()
{
    delete ui;
}
void Widget::timerEvent(QTimerEvent *event)
{
    if(event->timerId()==clocktimeid)
    {
        if(ui->lineEdit->text()==ui->label->text())
        {
            //qDebug()<<"??????";
            QString msg="现在是北京时间"+ui->label->text()+"到时间了,打屁屁咯";
            speecher->say(msg);

            this->killTimer(clocktimeid);


        }

    }



}
void Widget::timeout_slot()
{
    QTime time = QTime::currentTime();
    QString t=time.toString("hh::mm::ss");
    ui->label->setText(t);

}


void Widget::on_pushButton_clicked()
{
    btn= QMessageBox::question( this,"问题","确定时间吗",QMessageBox::Yes|QMessageBox::No);
    if(btn==QMessageBox::No)
    {
        ui->lineEdit->clear();
    }
    clocktimeid=this->startTimer(1000);
}
相关推荐
南郁6 小时前
007-nlohmann/json 项目应用-C++开源库108杰
c++·开源·json·nlohmann·现代c++·d2school·108杰
菠萝017 小时前
共识算法Raft系列(1)——什么是Raft?
c++·后端·算法·区块链·共识算法
海棠蚀omo7 小时前
C++笔记-C++11(一)
开发语言·c++·笔记
小道士写程序8 小时前
Qt 5.12 上读取 .xlsx 文件(Windows 平台)
开发语言·windows·qt
凌佚8 小时前
rknn优化教程(一)
c++·目标检测·性能优化
Lenyiin10 小时前
《 C++ 点滴漫谈: 四十 》文本的艺术:C++ 正则表达式的高效应用之道
c++·正则表达式·lenyiin
yxc_inspire12 小时前
基于Qt的app开发第十三天
c++·qt·app·tcp·面向对象
虾球xz13 小时前
CppCon 2015 学习:Concurrency TS Editor’s Report
开发语言·c++·学习
潇-xiao13 小时前
Qt 按钮类控件(Push Button 与 Radio Button)(1)
c++·qt
板鸭〈小号〉13 小时前
命名管道实现本地通信
开发语言·c++