主要用了一些样式设置指令,QT的定时器事件机制,QTime类的基本使用方法。
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QIcon>
#include <QTime>
#include <QDebug>
#include <QMessageBox>
#include <QStringList>
#include <QTextToSpeech>
#include <QTextEdit>
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 *event);
int id;//定义定时器id
int id1;//基础显示器
bool isSpeech;//是否开始阅读
QString setTimeStr;//闹钟设定的时刻
bool IsSetTime;//是否设定了闹钟
//定义阅读者
QTextToSpeech *speecher;
private slots:
void on_pushButton_clicked();
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
,IsSetTime(false)
,speecher(new QTextToSpeech(this))
, ui(new Ui::Widget)
{
ui->setupUi(this);
//设置纯洁 窗口、
//this->setWindowFlag(Qt::FramelessWindowHint);
//this->showMaximized();//最大化显示
this->setWindowTitle("闹钟朗读者");
this->setWindowIcon(QIcon(":/img/tu1.png"));
//固定窗口大小
this->setFixedSize(1018,569);
ui->frame_1->move(0,0);
ui->frame_1->resize(this->size());
ui->frame_1->setStyleSheet("QFrame#frame_1{border-image:url(:/img/tu1.png)}");
ui->frame_2->move(50,50);
ui->frame_2->resize(ui->frame_1->width()-100,ui->frame_1->height()-100);
ui->frame_2->setStyleSheet("QFrame#frame_2{background-color:rgba(255,255,255,95)}");
ui->textEdit->setAlignment(Qt::AlignCenter);
//启动2个定时器
id = startTimer(1000);//每隔1s自动执行timerEvent()函数
id1 = startTimer(1000);//每隔1s自动执行timerEvent()函数
}
Widget::~Widget()
{
//关闭定时器
killTimer(id);
killTimer(id1);
delete ui;
}
void Widget::timerEvent(QTimerEvent *event)
{
if(event->timerId()==id){
QTime sys_time = QTime::currentTime();//获取系统时间
QString t = sys_time.toString("hh:mm:ss");//系统时间转换为字符串
if(IsSetTime)
{
//字符串分割
QStringList list = t.split(":");
if(list[0]+":"+list[1] == setTimeStr)
{
killTimer(id);//关闭定时器
for (int i=0;i<30;i++) {
speecher->say(ui->textEdit->toPlainText());
}
// id2 = startTimer(60000);//每隔60s也就是1分钟执行timeEvent()函数
}
}
}else if(event->timerId()==id1){
//获取系统时间
QTime sys_time = QTime::currentTime();
//系统时间转换为字符串
QString t = sys_time.toString("hh:mm:ss");
//将系统时间显示到界面上
ui->nowatime_label->setText(t);
ui->nowatime_label->setAlignment(Qt::AlignCenter);
}
}
void Widget::on_pushButton_clicked()
{
if(ui->pushButton->text()=="启动")
{
if(ui->timeEdit->text()!=""&&ui->textEdit->toPlainText()!="")
{
//设置不可用状态
ui->textEdit->setEnabled(false);
ui->timeEdit->setEnabled(false);
setTimeStr = ui->timeEdit->text();
qDebug() << setTimeStr;
//QString字符串的截取
QStringList list = setTimeStr.split(":");
if(list.size()!=2||list[0].toInt()<1||list[0].toInt()>23||list[1].toInt()<1||list[1].toInt()>59)
{
QMessageBox::critical(this,
"提示",
"输入设定时间格式错误,请输入正确的格式(时:分)!",
QMessageBox::Ok);
}else
{
IsSetTime=true;
ui->pushButton->setText("关闭");
}
}else
{
QMessageBox::critical(this,
"提示",
"未输入设定时间或者朗读内容,请输入设定时间和朗读内容!",
QMessageBox::Ok);
}
}else
{
//设置可用状态
ui->textEdit->setEnabled(true);
ui->timeEdit->setEnabled(true);
speecher->stop();//停止朗诵
id = startTimer(1000);//每隔1s自动执行timerEvent()函数 打开定时器
IsSetTime=false;
ui->pushButton->setText("启动");
}
}