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