QTday3消息弹框/计时器

闹钟小软件

 widget.cpp

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QDebug>
#include <QPushButton>
#include <QLabel>
#include <QTimer>
#include <QTimerEvent>
#include <QTime>
#include <QMessageBox>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
    void timerEvent(QTimerEvent *e);//重写定时器事件函数

private:
    Ui::Widget *ui;
public:
    int timeId;
    bool isSettingAlarmClock = false;
private slots:
    void on_startBtn_clicked();
    void on_stopBtn_clicked();
};
#endif // WIDGET_H
#include "widget.h"
#include "ui_widget.h"

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

    ui->stopBtn->setEnabled(false);
    ui->startBtn->setEnabled(true);
    ui->clockLineEdit->setEnabled(true);
    ui->textEdit->setEnabled(false);
    ui->textEdit->clear();
    isSettingAlarmClock = false;
    //开启定时器
    timeId = startTimer(1000);
}

void Widget::timerEvent(QTimerEvent *e){
    //如果定时器不是 timeId, 直接返回
    if(e->timerId() != timeId){
        return;
    }
    //刷新展示当前时间
    QTime sys_time = QTime::currentTime();
    QString time = sys_time.toString("hh:mm:ss");
    ui->currentTimeBtn->setText(time);
    //如果 设置闹钟标识为false 直接返回
    if(true !=isSettingAlarmClock){
        return;
    }
    //设置闹钟标识为true 判断是否到设置的闹钟时间, 是->播报声音或提示, 虚拟机播放不了声音,就只提示
    if(time == ui->clockLineEdit->text()){
        int ret = QMessageBox::information(this,"提示","闹钟时间到啦,赶紧起来电脑开机学习!!!",QMessageBox::Yes,QMessageBox::Yes);
        if(ret == QMessageBox::Yes){
            qDebug()<<"好的,我赶紧起来开电脑";
        }
        qDebug()<<"闹钟时间到了";
    }
}

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

void Widget::on_startBtn_clicked()
{
    if(ui->clockLineEdit->text().isEmpty() || ui->clockLineEdit->text().isNull()){
        int ret = QMessageBox::information(this,"提示","还没设置闹钟时间,来设置时间:比如:12:00:00",QMessageBox::Yes,QMessageBox::Yes);
        if(ret == QMessageBox::Yes){
            qDebug()<<"好的,我赶紧起来开电脑";
        }
        return;
    }
    ui->startBtn->setEnabled(false);
    ui->stopBtn->setEnabled(true);
    ui->clockLineEdit->setEnabled(false);
    ui->textEdit->setEnabled(false);
    ui->textEdit->setText("三更灯火五更鸡\n正式男儿读书时\n黑发不知勤学早\n白发方悔读书迟");
    this->isSettingAlarmClock = true;
}

void Widget::on_stopBtn_clicked()
{
    ui->stopBtn->setEnabled(false);
    ui->startBtn->setEnabled(true);
    ui->clockLineEdit->setEnabled(true);
    ui->textEdit->clear();
    ui->textEdit->setEnabled(false);
    ui->clockLineEdit->clear();
    isSettingAlarmClock = false;
}

/*
    程序启动: 停止按钮不可点击/开始按钮可点击/闹钟提示置空/闹钟edit置空/闹钟标识置为false
    1开启定时器tId_currentTime, 记时事件处理显示当前时间
    2点击开始按钮: 停止按钮可点击/开始按钮不可点击/闹钟提示文本设置/闹钟edit不可点击/闹钟标识置为true. 比较当前时间 == 编辑时间, 相同播报文字 否则不播报,
    3点击停止: 闹钟标识置为false 停止按钮不可点击/开始按钮可点击/闹钟提示置空/闹钟edit置空. 定时器不比较时间 只展示时间
*/

markdown笔记:思维导图不利于复习知识点和查找搜索, 所以写的markdown

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
倒计过程中将剩余间显示在4位动态数码管上。 这个功能可以通过以下步骤实现: 1. 配置定/计时器,设置计间为3分钟。 2. 初始化4位动态数码管,将其设置为显示初始间(3分钟)。 3. 开始计时器。 4. 在计过程中,每秒钟更新数码管上显示的剩余间。 5. 当计时器结束,停止计时器并在数码管上显示计结束的提示信息。 下面是一个简单的代码示例: ```c #include <reg52.h> #define LED P0 // 数码管连接的IO口 sbit D1 = P2^2; // 数码管位选信号 sbit D2 = P2^3; sbit D3 = P2^4; sbit D4 = P2^5; void delay(unsigned int t) // 延函数 { unsigned int i, j; for (i = 0; i < t; i++) for (j = 0; j < 120; j++); } void display(unsigned char num) // 数码管显示函数 { switch (num) { case 0: LED = 0xc0; break; case 1: LED = 0xf9; break; case 2: LED = 0xa4; break; case 3: LED = 0xb0; break; case 4: LED = 0x99; break; case 5: LED = 0x92; break; case 6: LED = 0x82; break; case 7: LED = 0xf8; break; case 8: LED = 0x80; break; case 9: LED = 0x90; break; } } void main() { unsigned int i, j, k; unsigned char num[4] = {3, 0, 0, 0}; // 初始计间为3分钟 TMOD = 0x01; // 定/计时器0工作在模式1 TH0 = 0x3c; // 计3分钟 TL0 = 0xb0; TR0 = 1; // 开始计时器 while (1) { for (i = 0; i < 4; i++) { // 依次显示每一位数码管 switch (i) { case 0: D1 = 0; break; // 选择第1位数码管 case 1: D2 = 0; break; case 2: D3 = 0; break; case 3: D4 = 0; break; } display(num[i]); // 显示当前位的数字 delay(2); // 延一段间以保证显示效果 LED = 0xff; // 关闭数码管 switch (i) { case 0: D1 = 1; break; // 取消选择第1位数码管 case 1: D2 = 1; break; case 2: D3 = 1; break; case 3: D4 = 1; break; } } if (TF0) { // 判断计时器是否计结束 TR0 = 0; // 停止计时器 LED = 0x00; // 在数码管上显示计结束的提示信息 delay(1000); LED = 0xff; delay(1000); LED = 0x00; delay(1000); LED = 0xff; break; } num[3]--; // 每秒钟将剩余间减1 if (num[3] == 255) { num[3] = 9; num[2]--; if (num[2] == 255) { num[2] = 5; num[1]--; if (num[1] == 255) { num[1] = 9; num[0]--; } } } } } ``` 在上面的代码中,我们使用了定/计时器0来实现倒计功能,同使用了一个数组来存储剩余间,并在每秒钟更新数组中的数值。在显示数码管上,我们使用了一个位选信号来选择当前显示的数码管,并在显示完当前位的数字后关闭该数码管。最后,我们通过判断计时器是否计结束来停止计时器并在数码管上显示计结束的提示信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值