实现一个时钟

头文件

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);
}
相关推荐
唐诺3 小时前
几种广泛使用的 C++ 编译器
c++·编译器
mahuifa4 小时前
混合开发环境---使用编程AI辅助开发Qt
人工智能·vscode·qt·qtcreator·编程ai
冷眼看人间恩怨4 小时前
【Qt笔记】QDockWidget控件详解
c++·笔记·qt·qdockwidget
红龙创客4 小时前
某狐畅游24校招-C++开发岗笔试(单选题)
开发语言·c++
Lenyiin4 小时前
第146场双周赛:统计符合条件长度为3的子数组数目、统计异或值为给定值的路径数目、判断网格图能否被切割成块、唯一中间众数子序列 Ⅰ
c++·算法·leetcode·周赛·lenyiin
yuanbenshidiaos5 小时前
c++---------数据类型
java·jvm·c++
十年一梦实验室6 小时前
【C++】sophus : sim_details.hpp 实现了矩阵函数 W、其导数,以及其逆 (十七)
开发语言·c++·线性代数·矩阵
taoyong0016 小时前
代码随想录算法训练营第十一天-239.滑动窗口最大值
c++·算法
这是我586 小时前
C++打小怪游戏
c++·其他·游戏·visual studio·小怪·大型·怪物
fpcc6 小时前
跟我学c++中级篇——C++中的缓存利用
c++·缓存