c++&qt_day11

作业1

题目

Qt 实现一个语音播报的闹钟

效果
c++&qt_day11_第1张图片

代码

widget.h


#ifndef WIDGET_H
#define WIDGET_H

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget

{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr); // 构造函数
    ~Widget();

private:
    Ui::Widget *ui;

    QLineEdit *lineEdit;    // 设定的时间
    QPushButton *startBtn;  // 启动按钮
    QPushButton *stopBtn;   // 关闭按钮
    QLabel *timeLab;        // 当前时间
    QTextEdit *textEdit;    // 留言板
    QTimer *timer;          // 定时器
    QTimer *cur_timer;      // 当前时间定时器
    QTextToSpeech *tts;     // 语言播报
};

#endif // WIDGET_H

widget.cpp


#include "widget.h"
#include "ui_widget.h"


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

    // 界面相关
    this->setWindowTitle("语音提醒闹钟");
    this->setWindowIcon(QIcon(":/imgs/logo.png"));
    this->resize(800,600);
    this->setStyleSheet("background-color:#21252b; border-radius: 15px");

    // 聊天框
    textEdit = new QTextEdit("今晚跟二狗约好,晚上一起吃饭,他带了几个好朋友,别忘了多带两瓶酒",this);
    textEdit->move(30,315);
    textEdit->resize(740,255);
    textEdit->setStyleSheet("background-color:#96abb0; border-radius: 15px; padding: 30px; font: bold 36px");

    // 时钟
    timeLab = new QLabel(QDateTime::currentDateTime().toString("yyyy年MM月dd日\nhh:mm:ss"),this);
    timeLab->move(30,30);
    timeLab->resize(370,255);
    timeLab->setStyleSheet("background-color:#96abb0; border-radius: 15px; font: bold 36px");
    timeLab->setAlignment(Qt::AlignCenter); //居中

    // 设定时间
    lineEdit = new QLineEdit(QDateTime::currentDateTime().toString("yyyy年MM月dd日\nhh:mm:ss"),this);
    lineEdit->move(430,30);
    lineEdit->resize(340,95);
    lineEdit->setStyleSheet("background-color:#96abb0; border-radius: 15px; font: bold 20px");
    lineEdit->setAlignment(Qt::AlignCenter); //居中

    // 启动按钮
    startBtn = new QPushButton("启动",this);
    startBtn->move(430,155);
    startBtn->resize(340,50);
    startBtn->setStyleSheet("background-color:#96abb0; border-radius: 15px; font: bold 20px");

    // 停止按钮
    stopBtn = new QPushButton("停止",this);
    stopBtn->move(430,235);
    stopBtn->resize(340,50);
    stopBtn->setStyleSheet("background-color:#96abb0; border-radius: 15px; font: bold 20px");
    stopBtn->setEnabled(false); // 默认无法点击

    // 语音播报
    tts = new QTextToSpeech();
    tts->setLocale(QLocale::Chinese);

    // 定时器
    timer = new QTimer(this);
    cur_timer = new QTimer(this);
    cur_timer->start(1000); // 开启


    static QString reminder = textEdit->toPlainText();

    // 当前时间定时器信号与槽
    connect(cur_timer, &QTimer::timeout,[&](){
        timeLab->setText(QDateTime::currentDateTime().toString("yyyy年MM月dd日\nhh:mm:ss"));
    });

    // 定时器信号与槽
    connect(timer, &QTimer::timeout,[&](){

        // 当前时间与设定时间相等
        if (timeLab->text() == lineEdit->text()){
            textEdit->setText(reminder);
            startBtn->setEnabled(true);
            textEdit->setEnabled(true);
            lineEdit->setEnabled(true);
            stopBtn->setEnabled(false);
            timer->stop();

            // 语言播报
            tts->say(reminder);
        }
    });


    // 开始按钮信号与槽
    connect(startBtn,&QPushButton::clicked,[&](){
        qDebug() << "启动";
        // 设定时间大于当前时间
        if (lineEdit->text() > timeLab->text()){
            textEdit->clear();
            startBtn->setEnabled(false);
            stopBtn->setEnabled(true);
            textEdit->setEnabled(false);
            lineEdit->setEnabled(false);
            timer->start(1000);
        }
    });

    // 停止按钮信号与槽
    connect(stopBtn,&QPushButton::clicked,[&](){
        textEdit->setText(reminder);
        startBtn->setEnabled(true);
        stopBtn->setEnabled(false);
        textEdit->setEnabled(true);
        lineEdit->setEnabled(true);
        timer->stop();
    });
}

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

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