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_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic: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、运行结果
二、思维导图