蜡笔小新闹钟
需求:
实现
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include<QTime> //时间类
#include<QTimerEvent> //事件处理类
#include<QtTextToSpeech> //文本转语音类
#include<QMessageBox> //用户交互弹窗
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
void timerEvent(QTimerEvent *e); //要重写的关于定时器事件处理函数声明部分
private slots:
void on_startBtn_clicked();
void on_stopBtn_clicked();
private:
Ui::Widget *ui;
int tId1; //系统时间-->时钟id
int tId2; //闹钟时钟id
QTextToSpeech *speaker;
};
#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);
//启动系统时间显示
tId1 = startTimer(1000); //启动一个闹钟,每1000ms调用一次事件处理函数
//实例化一个播报员
speaker = new QTextToSpeech(this);
connect(ui->startBtn,&QPushButton::clicked,this,&Widget::on_startBtn_clicked); //手动连接clicked信号与startBtn槽函数
//设置程序title
setWindowTitle("Clock"); //Clock
}
Widget::~Widget()
{
delete ui;
}
//startBtn槽函数
void Widget::on_startBtn_clicked()
{
if(ui->startBtn->text() == "启动"){
tId2 = startTimer(1000);
//将按钮上的文本内容改为 "关闭",并设置按钮为不可用状态
ui->startBtn->setEnabled(false);
}
}
//stopBtn按钮对应槽函数
void Widget::on_stopBtn_clicked()
{
//实例化消息对话框的对象,使用有参构造完成
QMessageBox box(QMessageBox::Warning, //对话框图标
"警告", //对话框标题
"是否确认退出闹钟?", //对话框文本内容
QMessageBox::Yes|QMessageBox::No, //对话框提供的按钮
this); //父组件
int ret = box.exec();
if(ret == QMessageBox::Yes){
close(); //退出闹钟程序
}else{
ui->readText->clear(); //清除阅读框的文本内容
ui->lineEdit->clear(); //清除预定的闹钟
ui->startBtn->setText("开启");
ui->startBtn->setEnabled(true);
}
}
//获取系统时间处理事件函数
void Widget::timerEvent(QTimerEvent *e)
{
if(e->timerId() == tId1){
QTime sys_time = QTime::currentTime(); //获取当前系统时间,QTime:对象
QString t = sys_time.toString("hh:mm:ss"); //格式化时间对象
ui->sysTime->setText(t); //将时间写到ui界面中
ui->sysTime->setAlignment(Qt::AlignLeft); //将时间文本居左
QTime book_time = QTime::currentTime();
QString s = book_time.toString("hh:mm:ss"); //格式化预定时间
QString temp = ui->readText->toPlainText();
if(ui->lineEdit->text() == s){ //系统时间等于闹钟预定时间
ui->startBtn->setEnabled(false); //阅读过程中启动按钮不可用
//触发朗读文本内容事件
speaker->say(temp);
//将按钮上的文本内容改为 "关闭",并设置按钮为不可用状态
ui->startBtn->setText("开启");
ui->startBtn->setEnabled(true);
}
}
}
main.cpp
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
运行测试