当前位置: 首页 > article >正文

QT day05

实现可语音播报的闹钟

头文件:

#include <QTime>             //时间类
#include <QTimerEvent>       //定时器事件类
#include <QDateTime>         //日期时间类
#include <QTextToSpeech>     //语音播报类
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

signals:

public slots:
    void start_slot();
    void timeout_slot();
    void cancel_slot();
public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
    void mouseMoveEvent(QMouseEvent *event);       //鼠标移动事件
    void mousePressEvent(QMouseEvent *event);      //鼠标点击事件
    void speakText(const QString &text);

private:
    Ui::Widget *ui;
    QPoint temp;
    QLabel *sysTime,*lab1;
    QLineEdit *modTime,*clockTxt;
    QPushButton *startBtn,*cancelBtn;

    int timerId = 0;
    QTimer t;


};
#endif // WIDGET_H

源文件:

#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    this->setFixedSize(500,500);
    //this->setWindowFlag(Qt::FramelessWindowHint);
    //标签类
    sysTime = new QLabel(this);
    sysTime->resize(200,140);
    sysTime->move(50,50);
    sysTime->setScaledContents(true);
    sysTime->setStyleSheet("background-color:lightgreen; border-radius:20;\
                           font-size:20px;font-weight:bold");
    //按钮类
    startBtn = new QPushButton("启动",this);
    cancelBtn = new QPushButton("关闭",this);
    startBtn->move(sysTime->x()+sysTime->width()+15,110);
    cancelBtn->move(startBtn->x()+startBtn->width()+5,startBtn->y());
    startBtn->resize(40,30);
    cancelBtn->resize(40,30);
    //行标签类
    modTime = new QLineEdit(this);
    modTime->move(sysTime->y()+sysTime->width()+15,sysTime->y());
    modTime->setPlaceholderText("输入定时");
    modTime->resize(180,30);
    clockTxt = new QLineEdit(this);
    clockTxt->move(50,230);
    clockTxt->resize(400,250);
    clockTxt->setPlaceholderText("输入闹铃文本");
    //设置文本对齐到左上角
    clockTxt->setAlignment(Qt::AlignLeft|Qt::AlignTop);

    //连接信号与槽
    connect(startBtn,&QPushButton::clicked,this,&Widget::start_slot);
    connect(&t,&QTimer::timeout,this,&Widget::timeout_slot);
    connect(cancelBtn,&QPushButton::clicked,this,&Widget::cancel_slot);

}

Widget::~Widget()
{
    delete ui;
}

//鼠标移动事件
void Widget::mouseMoveEvent(QMouseEvent *event)
{
    this->move(event->globalPos() - temp);
}

//鼠标点击事件
void Widget::mousePressEvent(QMouseEvent *event)
{
    temp = event->globalPos() - this->pos();    //求出中间辅助变量
    if(event->button() == Qt::RightButton)
    {
        this->close();
    }
}

void Widget::start_slot()
{
    t.start(1000);          //每隔指定时间,发送一个timeout信号
}

void Widget::timeout_slot()
{
    //获取系统时间
    QTime sysTime = QTime::currentTime();
    //将QTime类对象转变成字符串
    QString sysTimeStr = sysTime.toString("hh:mm:ss");
    this->sysTime->setText(sysTimeStr);
    //sysTime->setAlignment(Qt::AlignCenter);

    //将3个地方设置成不可点击
    startBtn->setEnabled(false);
    modTime->setReadOnly(true);
    clockTxt->setReadOnly(true);

    //比较逻辑,如果和输入的时间相等,就发出声音
    QString modTimeStr = modTime->text();
    if(sysTimeStr == modTimeStr)
    {
        qDebug()<<"发出声音";
        speakText(clockTxt->text());
    }
}

void Widget::cancel_slot()
{
    int res = QMessageBox::information(this,
                                       "提示",
                                       "您确定要取消吗?",
                                       QMessageBox::Yes|QMessageBox::No,
                                       QMessageBox::Yes);
    if(res == QMessageBox::Yes)
    {
        qDebug()<<"解除限制功能";
        t.stop();
        startBtn->setEnabled(true);
        modTime->setReadOnly(false);
        clockTxt->setReadOnly(false);

    }
    else if(res == QMessageBox::No)
    {
        qDebug()<<"继续执行程序";
    }
}

void Widget::speakText(const QString &text)
{
    QTextToSpeech *speaker = new QTextToSpeech;
    speaker->say(text);
}

主函数:

#include "widget.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}


http://www.kler.cn/news/341819.html

相关文章:

  • torchvision.transforms.Resize()的用法
  • 视频流媒体融合与视频监控汇聚管理系统集成方案
  • 【韩顺平Java笔记】第8章:面向对象编程(中级部分)【285-296】
  • 【JDK17 | 4】Java 17 深入剖析:增强的文本块功能
  • 大数据新视界 --大数据大厂之 Druid 查询性能提升:加速大数据实时分析的深度探索
  • 十一NGINX
  • 软件测试学习笔记丨MongoDB
  • Unity3D相关知识点总结
  • Python从入门到高手6.1节-字符串的定义与编码
  • 车载电源OBC+DC/DC
  • 25西安电子科技大学考研预报名人数信息—公布
  • OmniPlan Pro for Mac 项目管理流程软件安装教程【保姆级教程,简单小白轻松上手】
  • 机器学习中的熵(Entropy)是什么?
  • 修改 antd a-popover气泡卡片弹窗背景颜色
  • 代码随想录算法训练营第四十六天 | 647. 回文子串,516.最长回文子序列
  • Python 工具库每日推荐 【Matplotlib】
  • 需求9——通过一个小需求来体会service层的作用
  • ubuntu下载gitee库源码
  • 代码随想录day29:动态规划part2
  • 备份python运行环境