实现的功能:1.由定时器每隔一秒发送信号,显示系统时间
2. 可以手动设置闹钟时间
3.文本编辑器为要提示的内容,当系统时间和手动设置时间相等语音播报该段文字
4.点击启动按钮,设置闹钟完成,并且闹钟时间不能修改
5.点击取消按钮,提示警告弹窗,点击yes,恢复可编辑闹钟时间。点击no,取消当前操作;
源文件
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
this->timer=new QTimer;
timeid=startTimer(100);
ui->settimelabel->setText("12 14 20:05:11");
//连接定时器信号和自定义的槽函数
connect(timer,&QTimer::timeout,this,&Widget::on_timer_timeout);
//连接读文本信号和自定以槽函数
// connect(this,&Widget::text,this,&Widget::on_text_speech);
};
void Widget::timerEvent(QTimerEvent *event)
{
if(event->timerId()==timeid)
{
QDateTime sysDateTime=QDateTime::currentDateTime();
QString dateTime=sysDateTime.toString("MM dd hh:mm:ss");
ui->systimelabel->setText(dateTime);
}
}
Widget::~Widget()
{
delete ui;
}
//启动闹钟
void Widget::on_startbtn_clicked()
{
timer->start(100);
//闹钟启动,行编辑器和文本编辑器失效
ui->settimelabel->setReadOnly(true);
ui->textedit->setReadOnly(true);
}
//
void Widget::on_timer_timeout()
{
if(ui->settimelabel->text()==ui->systimelabel->text())
{
QTextToSpeech *speech =new QTextToSpeech(this);
QString text=ui->textedit->toPlainText();
//qDebug()<<text;
speech->say(text);
}
};
//停止闹钟
void Widget::on_stopbtn_clicked()
{
QMessageBox box(QMessageBox::Warning,"Warning","是否要重设闹钟",QMessageBox::Yes|QMessageBox::No);
int ret = box.exec();
if(ret==QMessageBox::Yes)
{
//关闭定时器
timer->stop();
//定时器关闭后行编辑器和文本编辑器重新有效
ui->settimelabel->setReadOnly(false);
ui->textedit->setReadOnly(false);
//清空之前设置的行文本编辑器
ui->settimelabel->clear();
}
}
头文件
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QTimer>
#include <QTime>
#include <QTimerEvent>
#include <QDebug>
#include <QTextToSpeech>
#include <QMessageBox>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
signals:
// void text();
public:
Widget(QWidget *parent = nullptr);
~Widget();
void timerEvent(QTimerEvent *event);
private slots:
void on_startbtn_clicked();
void on_timer_timeout();
/* void on_text_speech()*/;
void on_stopbtn_clicked();
private:
Ui::Widget *ui;
QTimer *timer;
int timeid;
};
#endif // WIDGET_H