一、作业(实现一个闹钟)
1、代码
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //调整标签页大小
    this->resize(800,400);
    //lab:显示系统时间
    this->local_time = new QLabel(this);
    local_time->resize(200,80);
    local_time->move(100,50);
    QFont font;
    font.setPointSize(26);
    local_time->setFont(font);
    //设置系统时间在标签页中不断跳转
    t1.start(1000);
    connect(&t1,&QTimer::timeout, this,&Widget::timeout_slot1);
    //Lineedit:编辑一个定时时间
    this->my_time = new QLineEdit(this);
    my_time->resize(250,40);
    my_time->move(400,50);
    my_time->setPlaceholderText("闹钟时间");
    //LTextEdit :编辑一个播报员内容
    this->noise = new QTextEdit(this);
    noise->resize(600,200);
    noise->move(100,180);
    noise->setPlaceholderText("播报内容");
    //创建一个语音播报类的播报员
    speech = new QTextToSpeech(this);
    speech->setLocale(QLocale::Chinese);//设置语言环境
    // 检查是否支持文本到语音功能
    if (speech->availableVoices().isEmpty())
    {
        qDebug() << "没有可用的语音引擎";
        return ;
    }
    speech->setVolume(1.0);// 设置音量
    speech->setRate(0.0);// 设置语速
    speech->setPitch(1.0);//设置音高
    //启动按钮、取消按钮
    this->st_art = new QPushButton("启动",this);
    st_art->resize(70,30);
    st_art->move(400,100);
    this->over = new QPushButton("取消",this);
    over->resize(70,30);
    over->move(480,100);
    //给取消按钮设置不可点
    over->setEnabled(false);
    connect(this->st_art,&QPushButton::clicked,this,&Widget::my_start);
    connect(&t2,&QTimer::timeout,this,&Widget::timeout_slot2);
    connect(this->over,&QPushButton::clicked,this,&Widget::my_over);
}
Widget::~Widget()
{
    delete ui;
}
//启动按钮
void Widget::my_start()
{
    //把行编辑器,文本编辑器和启动按钮设置为不可操作
    this->my_time->setEnabled(false);
    this->noise->setEnabled(false);
    this->st_art->setEnabled(false);
    //把取消按钮设置为可操作
    this->over->setEnabled(true);
    //每隔一秒把label中的系统时间和设置好的行编辑器内容比较
    t2.start(1000);
}
//取消按钮
void Widget::my_over()
{
    //把行编辑器,文本编辑器和启动按钮重新设置为可操作
    this->my_time->setEnabled(true);
    this->noise->setEnabled(true);
    this->st_art->setEnabled(true);
    //清空行编辑器内容
    this->my_time->clear();
    //把取消按钮设置为不可操作
    this->over->setEnabled(false);
    //停止t2定时器
    t2.stop();
}
//定义播报
void Widget::my_noise(QString text)
{
    if(speech->state()==QTextToSpeech::Ready)
         {
             speech->say(text);//开始合成文本
         }
}
//定义系统时间
void Widget::timeout_slot1()
{
    QTime systime = QTime::currentTime();
    QString tm = systime.toString("hh:mm:ss");
    this->local_time->setText(tm);
}
//定义闹钟
void Widget::timeout_slot2()
{
    QString text1 = this->my_time->text();
    QString text2 = this->local_time->text();
    qDebug() <<text1;
    qDebug() <<text2;
    if(text1 == text2)
    {
        //开始播报
        qDebug() <<this->noise->toPlainText();
        this->my_noise(this->noise->toPlainText());
        //停止比较
        t2.stop();
        //把行编辑器,文本编辑器和启动按钮重新设置为可操作
        this->my_time->setEnabled(true);
        this->noise->setEnabled(true);
        this->st_art->setEnabled(true);
        //清空行编辑器内容
        this->my_time->clear();
        //把取消按钮设置为不可操作
        this->over->setEnabled(false);
    }
}
void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    painter.drawPixmap(0,0,width(),height(),QPixmap("C:\\Users\\22856\\Desktop\\pictrue\\OIP-C.jpg"));
}
 
2、运行结果

二、思维导图




















