DAY3,Qt(完成闹钟的实现,定时器事件处理函数的使用)

1.完成闹钟的实现,到点播报文本框的内容;

---alarm.h---头文件
#ifndef ALARM_H
#define ALARM_H

#include 
#include   //定时器处理函数类
#include   //时间类
#include   //按钮类
#include   //行编辑类
#include   //标签类
#include   //文本编辑类
#include   //输出信息类
#include 

QT_BEGIN_NAMESPACE
namespace Ui { class Alarm; }
QT_END_NAMESPACE

class Alarm : public QWidget
{
    Q_OBJECT

public:
    Alarm(QWidget *parent = nullptr);
    ~Alarm();
    QTextToSpeech *speechptr;  //语音播报类指针

    void timerEvent(QTimerEvent *e);  //要重写的的定时器事件处理函数的声明

private slots:
    void on_startbtn_clicked();
    void on_stopbtn_clicked();

private:
    Ui::Alarm *ui;

    //定义定时器
    int sysid;    //系统时间
    int editid;   //定时时间
};
#endif // ALARM_H
---alarm.cpp---函数实现文件
#include "alarm.h"
#include "ui_alarm.h"

Alarm::Alarm(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Alarm)
{
    ui->setupUi(this);
    //实例化一个播报员
    speechptr = new QTextToSpeech(this);
    ui->lineedit->setAlignment(Qt::AlignCenter);  //文本居中对齐

}

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

//启动按钮事件
void Alarm::on_startbtn_clicked()
{
    if(ui->startbtn->text() == "启动")
    {
        //启动报警定时器和系统定时器
        sysid = startTimer(1000);
        editid = startTimer(1000);

        //设置不可使用:自身,行编辑,文本编辑
        ui->startbtn->setEnabled(false);
        ui->lineedit->setEnabled(false);
        ui->textedit->setEnabled(false);

        //设置可用停止按钮
        ui->stopbtn->setEnabled(true);
    }
}

//停止按钮事件
void Alarm::on_stopbtn_clicked()
{
    if(ui->stopbtn->text() == "暂停")
    {
        //暂停报警
        this->killTimer(editid);
        //设置不可使用:自身
        ui->stopbtn->setEnabled(false);

        //设置可用:行编辑,文本编辑,启动按钮
        ui->startbtn->setEnabled(true);
        ui->lineedit->setEnabled(true);
        ui->textedit->setEnabled(true);
    }
}

//定时器事件处理函数
void Alarm::timerEvent(QTimerEvent *e)
{
    //处理系统时间
    if(e->timerId() == sysid)
    {
        QTime systime = QTime::currentTime();
        QString s_systime = systime.toString("hh : mm : ss");  //将获取的时间转为字符串
        ui->timelab->setText(s_systime);  //时间写入标签
        ui->timelab->setAlignment(Qt::AlignCenter);  //剧中对齐
    }else if(e->timerId() == editid)
    {
        QString edittime = ui->lineedit->text();  //自定义时间
        QTime systime = QTime::currentTime();  //系统时间
        QString s_systime = systime.toString("hh : mm : ss");  //将获取的时间转为字符串
        if(s_systime == edittime)
        {
            //实现语音播报文本框内容
            QString content = ui->textedit->toPlainText();
            speechptr->say(content);
        }
    }

}

---main.cpp---测试文件
#include "alarm.h"

#include 

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Alarm w;
    w.show();
    return a.exec();
}

点击启动按钮后---

DAY3,Qt(完成闹钟的实现,定时器事件处理函数的使用)_第1张图片

 

 点击暂停按钮后---

DAY3,Qt(完成闹钟的实现,定时器事件处理函数的使用)_第2张图片

2.今日思维导图;

 

你可能感兴趣的:(qt,qt,开发语言)