0910作业+思维导图

一、作业(实现一个闹钟)

1、代码

1)头文件

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPushButton>
#include <QLabel>
#include <QLineEdit>
#include <QTextEdit>
#include <QDebug>
#include <QIcon>
#include <QMovie>
#include <QTime>
#include <QTimer>
#include <QTimeEdit>
#include <QTextToSpeech>
#include <QPainter>
#include <QPixmap>
#include <QMouseEvent>


QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

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

public slots:
    void my_start();
    void my_over();
    void my_noise(QString text);
    void timeout_slot1(); //自定义超时函数
    void timeout_slot2(); //自定义超时函数

    void mouseMoveEvent(QMouseEvent *event) override;   //鼠标移动事件
    void mousePressEvent(QMouseEvent *event) override;  //鼠标按压事件
    void paintEvent(QPaintEvent *event); //修改背景

private:
    Ui::Widget *ui;
    QPushButton *st_art;
    QPushButton *over;
    QLabel *local_time;
    QLineEdit *my_time;
    QTextEdit *noise;
    QTimer t1;
    QTimer t2;
    QTextToSpeech *speech;
    QPoint temp;     //辅助向量

};
#endif // WIDGET_H

2).cpp文件

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


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

    //调整标签页大小
    this->resize(800,400);
    //关闭头部
    this->setWindowFlag(Qt::FramelessWindowHint);
    //设置鼠标移动
    //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::mouseMoveEvent(QMouseEvent *event)   //鼠标移动事件
{
    this->move(event->globalPos()-temp);
}
void Widget::mousePressEvent(QMouseEvent *event)  //鼠标按压事件
{
    temp = event->globalPos()-this->pos();
}
//设置背景
void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    painter.drawPixmap(0,0,width(),height(),QPixmap("C:\\Users\\22856\\Desktop\\pictrue\\OIP-C.jpg"));
}



2、运行结果

二、思维导图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值