Qt实现简易小闹钟

首先是需求:

1:设定时间,当时间到后,系统会读出您所写的备注内容,并会弹出时间到的提示

2:开始计时后,会锁定备注框与时间输入框

效果图:

 

(爱门!)

首先画ui设计,”开始定时“按钮后,还有一排label框,因为是透明的,所以看不见

 实现时间显示

void Oclock::on_LCD_1_overflow()
{
    //1获取系统时间
    QDateTime currentTime = QDateTime::currentDateTime();

    QString timeText = currentTime.toString("hh:mm:ss");
    //把时间放到LCD中
    ui->LCD_1->setDigitCount(8);//设置为显示8位
    ui->LCD_1->display(timeText);
    if(flag1==1)
        emit singal_1(); //当检测到按钮按下,发送对应信号
    if(flag2==1)
        emit singal_2();
    if(flag3==1)
        emit singal_3();
    if(flag4==1)
        emit singal_3();

}

void Oclock::on_nyr_linkActivated()
{
    //1获取系统时间
    QDateTime currentTime = QDateTime::currentDateTime();
    QString timeText = currentTime.toString("yyyy年MM月dd日 dddd");

    //把时间放入文本框
    ui->nyr->setText(timeText);
}

 还要在构造函数里写启动信号

    //给定时器事件指针实例化对象
    t1 = new QTimer(this);
    t1->start(500);
    //连接timeout信号对应的槽函数//主时钟
    connect(t1, &QTimer::timeout, this, &Oclock::on_LCD_1_overflow);
    connect(t1, &QTimer::timeout, this, &Oclock::on_nyr_linkActivated);

接下来是闹钟部分。

原理:按下按钮1后,锁定闹钟框和备注框,获取时间的函数开始持续发送信号1。在设定时间的框内,获取系统实时时间,并把自身上写的时间转换为相同格式,相比较。如果相同,则用speech函数读出备注栏内写的内容。同时,让 ”时间到“ 弹出。

构造函数内:
connect(this, &Oclock::singal_1, this, &Oclock::on_time_1_cursorPositionChanged);




//闹钟1
void Oclock::on_time_1_cursorPositionChanged()
{
    //1获取系统时间
    QDateTime currentTime = QDateTime::currentDateTime();
    QString timeText = currentTime.toString("hh:mm:ss");

    QString TC_1 = ui->time_1->text();
    if(timeText == TC_1)
    {
        speech.say(ui->lineEdit1_->text());
        ui->TS_1->setText("时间到!");
    }
}
//按钮1
void Oclock::on_DS_1_clicked()
{
    if(ui->DS_1->text() == "开始定时")
    {
        flag1 = 1;
        ui->DS_1->setText("关闭闹钟");
        ui->time_1->setEnabled(false);    //设置完闹钟后,若不关闭,则无法调整时间
        ui->lineEdit1_->setEnabled(false);
    }else if(ui->DS_1->text() == "关闭闹钟")
    {
        flag1 = 0;
        ui->DS_1->setText("开始定时");
        ui->TS_1->clear();         //清除后面的提示
        ui->time_1->setEnabled(true);   //解除锁定
        ui->lineEdit1_->setEnabled(true);
    }
}

代码总览

oclock.h文件

#include <QTimer>
#include <QDateTime>
#include <QObject>
#include <QTime>
#include <QLCDNumber>

QT_BEGIN_NAMESPACE
namespace Ui { class Oclock; }
QT_END_NAMESPACE

class Oclock : public QWidget
{
    Q_OBJECT
signals:
    void singal_1();          //自定义信号
    void singal_2();
    void singal_3();
    void singal_4();

public:
    Oclock(QWidget *parent = nullptr);
    ~Oclock();

private slots:
    void on_LCD_1_overflow();

    void on_nyr_linkActivated();

    void on_time_1_cursorPositionChanged();

    void on_DS_1_clicked();

    void on_TS_1_linkActivated();

    void on_time_2_cursorPositionChanged();

    void on_DS_2_clicked();

    void on_TS_2_linkActivated();

    void on_time_3_cursorPositionChanged();

    void on_DS_3_clicked();

    void on_time_4_cursorPositionChanged();

    void on_DS_4_clicked();

private:
    Ui::Oclock *ui;
    QTimer *t1;   //定义时间定时器的指针


    int flag1=0;
    int flag2=0;
    int flag3=0;
    int flag4=0;

    //定义一个播报者
    QTextToSpeech speech;
};
#endif // OCLOCK_H

oclock.cpp

#include "oclock.h"
#include "ui_oclock.h"

Oclock::Oclock(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Oclock)
{
    ui->setupUi(this);
    //给定时器事件指针实例化对象
    t1 = new QTimer(this);
    t1->start(500);
    //连接timeout信号对应的槽函数//主时钟
    connect(t1, &QTimer::timeout, this, &Oclock::on_LCD_1_overflow);
    connect(t1, &QTimer::timeout, this, &Oclock::on_nyr_linkActivated);

    //闹钟部分
    connect(this, &Oclock::singal_1, this, &Oclock::on_time_1_cursorPositionChanged);
    connect(this, &Oclock::singal_2, this, &Oclock::on_time_2_cursorPositionChanged);
    connect(this, &Oclock::singal_3, this, &Oclock::on_time_3_cursorPositionChanged);
    connect(this, &Oclock::singal_4, this, &Oclock::on_time_4_cursorPositionChanged);

    //锁死窗口大小
    this->setFixedSize(1200,741);   //16:9
    //设置标题
    this->setWindowTitle("一般路过小闹钟");
    //设置背景
    setAutoFillBackground(true);  //允许设置
    QPixmap pixmap = QPixmap(":/QQ_1.jpg").scaled(this->size());

    QPalette palette(this->palette());
    palette.setBrush(QPalette::Background, QBrush(pixmap));
    this->setPalette(palette);

}

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


void Oclock::on_LCD_1_overflow()
{
    //1获取系统时间
    QDateTime currentTime = QDateTime::currentDateTime();

    QString timeText = currentTime.toString("hh:mm:ss");
    //把时间放到LCD中
    ui->LCD_1->setDigitCount(8);//设置为显示8位
    ui->LCD_1->display(timeText);
    if(flag1==1)
        emit singal_1(); //时刻发送信号
    if(flag2==1)
        emit singal_2();
    if(flag3==1)
        emit singal_3();
    if(flag4==1)
        emit singal_3();

}

void Oclock::on_nyr_linkActivated()
{
    //1获取系统时间
    QDateTime currentTime = QDateTime::currentDateTime();
    QString timeText = currentTime.toString("yyyy年MM月dd日 dddd");

    //把时间放入文本框
    ui->nyr->setText(timeText);
}
//闹钟1
void Oclock::on_time_1_cursorPositionChanged()
{
    //1获取系统时间
    QDateTime currentTime = QDateTime::currentDateTime();
    QString timeText = currentTime.toString("hh:mm:ss");

    QString TC_1 = ui->time_1->text();
    if(timeText == TC_1)
    {
        speech.say(ui->lineEdit1_->text());
        ui->TS_1->setText("时间到!");
    }
}
//按钮1
void Oclock::on_DS_1_clicked()
{
    if(ui->DS_1->text() == "开始定时")
    {
        flag1 = 1;
        ui->DS_1->setText("关闭闹钟");
        ui->time_1->setEnabled(false);    //设置完闹钟后,若不关闭,则无法调整时间
        ui->lineEdit1_->setEnabled(false);
    }else if(ui->DS_1->text() == "关闭闹钟")
    {
        flag1 = 0;
        ui->DS_1->setText("开始定时");
        ui->TS_1->clear();         //清除后面的提示
        ui->time_1->setEnabled(true);   //解除锁定
        ui->lineEdit1_->setEnabled(true);
    }
}
//提示槽,没用,不小心搞出来的,删又不敢删
void Oclock::on_TS_1_linkActivated()
{

}
//闹钟2
void Oclock::on_time_2_cursorPositionChanged()
{
    //1获取系统时间
    QDateTime currentTime = QDateTime::currentDateTime();
    QString timeText = currentTime.toString("hh:mm:ss");

    QString TC_2 = ui->time_2->text();
    if(timeText == TC_2)
    {
        speech.say(ui->lineEdit_2->text());
        ui->TS_2->setText("时间到!");
    }
}
//按钮2
void Oclock::on_DS_2_clicked()
{
    if(ui->DS_2->text() == "开始定时")
    {
        flag2 = 1;
        ui->DS_2->setText("关闭闹钟");
        ui->time_2->setEnabled(false);    //设置完闹钟后,若不关闭,则无法调整时间
        ui->lineEdit_2->setEnabled(false);
    }else if(ui->DS_2->text() == "关闭闹钟")
    {
        flag2 = 0;
        ui->DS_2->setText("开始定时");
        ui->TS_2->clear();         //清楚后面的提示
        ui->time_2->setEnabled(true);   //解除锁定
        ui->lineEdit_2->setEnabled(true);
    }
}
//提示槽,没用,不小心搞出来的
void Oclock::on_TS_2_linkActivated()
{

}
// 闹钟3
void Oclock::on_time_3_cursorPositionChanged()
{
    //1获取系统时间
    QDateTime currentTime = QDateTime::currentDateTime();
    QString timeText = currentTime.toString("hh:mm:ss");

    QString TC_3 = ui->time_3->text();
    if(timeText == TC_3)
    {
        speech.say(ui->lineEdit_3->text());
        ui->TS_3->setText("时间到!");
    }
}
// 按钮3
void Oclock::on_DS_3_clicked()
{
    if(ui->DS_3->text() == "开始定时")
    {
        flag3 = 1;
        ui->DS_3->setText("关闭闹钟");
        ui->time_3->setEnabled(false);    //设置完闹钟后,若不关闭,则无法调整时间
        ui->lineEdit_3->setEnabled(false);
    }else if(ui->DS_3->text() == "关闭闹钟")
    {
        flag3 = 0;
        ui->DS_3->setText("开始定时");
        ui->TS_3->clear();         //清楚后面的提示
        ui->time_3->setEnabled(true);   //解除锁定
        ui->lineEdit_3->setEnabled(true);
    }
}
//闹钟4
void Oclock::on_time_4_cursorPositionChanged()
{
    //1获取系统时间
    QDateTime currentTime = QDateTime::currentDateTime();
    QString timeText = currentTime.toString("hh:mm:ss");

    QString TC_4 = ui->time_3->text();
    if(timeText == TC_4)
    {
        speech.say(ui->lineEdit_4->text());
        ui->TS_4->setText("时间到!");
    }
}

void Oclock::on_DS_4_clicked()
{
    if(ui->DS_4->text() == "开始定时")
    {
        flag4 = 1;
        ui->DS_4->setText("关闭闹钟");
        ui->time_4->setEnabled(false);    //设置完闹钟后,若不关闭,则无法调整时间
        ui->lineEdit_4->setEnabled(false);
    }else if(ui->DS_4->text() == "关闭闹钟")
    {
        flag4 = 0;
        ui->DS_4->setText("开始定时");
        ui->TS_4->clear();         //清楚后面的提示
        ui->time_4->setEnabled(true);   //解除锁定
        ui->lineEdit_4->setEnabled(true);
    }
}

使用效果:

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

老K殿下

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

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

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

打赏作者

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

抵扣说明:

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

余额充值