一、作业(实现一个闹钟)
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、运行结果
二、思维导图