首页 > 其他分享 >QT使用定时器事件驱动完成定时播报效果

QT使用定时器事件驱动完成定时播报效果

时间:2024-09-11 10:54:58浏览次数:13  
标签:Widget 定时器 QT sysTime StartUp 事件驱动 SysTime new include

widget.h
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QObject>
#include <QPushButton>
#include <QLineEdit>
#include <QLabel>
#include <QTimer>
#include <QString>
#include <QTime>
#include <QTextEdit>
#include <QMessageBox>
#include <QDebug>
#include <QtTextToSpeech>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

    static QTime sysTime;
    QPushButton *StartUp;
    QPushButton *Cancel;
    QLineEdit *TimeEdit;
    QTextEdit *PoetryEdit;
    QLabel *SysTime;
    QTextToSpeech *speech;

    void timerEvent(QTimerEvent *event) override;
    int timerId;

public slots:
    // 显示系统时间
    void SysTimeShow();
    // 启动定时器
    void StartTimer();
    // 关闭定时器

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QTextToSpeech>

QTime Widget::sysTime;

Widget::Widget(QWidget *parent)
    : QWidget(parent)
   , ui(new Ui::Widget)
{
    ui->setupUi(this);
    this->setFixedSize(500, 500);

    // 启动按钮
    StartUp = new QPushButton(this);
    StartUp->setText("启动");
    StartUp->setFixedSize(70, 40);
    StartUp->move(270, 150);
    connect(StartUp, &QPushButton::clicked, this, &Widget::StartTimer);

    // 取消按钮
    Cancel = new QPushButton(this);
    Cancel->setText("取消");
    Cancel->setFixedSize(70, 40);
    Cancel->move(370, 150);

    // 时间行编辑器
    TimeEdit = new QLineEdit(this);
    TimeEdit->setFixedSize(180, 40);
    TimeEdit->move(270, 100);

    // 诗句行编辑器
    PoetryEdit = new QTextEdit(this);
    PoetryEdit->setFixedSize(400, 250);
    PoetryEdit->move(50, 200);

    // 系统时间标签
    SysTime = new QLabel(this);
    SysTime->setFixedSize(190, 85);
    SysTime->move(50, 100);
    SysTime->setStyleSheet("background-color:rgb(248,227,228)");
    SysTime->setAlignment(Qt::AlignCenter);

    // 播报
    speech = new QTextToSpeech(this);

    timerId = startTimer(1000);
}

// 显示系统时间
void Widget::SysTimeShow()
{
    Widget::sysTime = QTime::currentTime();
    QString tm = Widget::sysTime.toString("hh::mm::ss");
    SysTime->setText(tm);
    qDebug() << tm;
}

// 启动按钮
void Widget::StartTimer()
{
    // 获取输入的时间
    QString TimeStr = TimeEdit->text();

    QString Sys = sysTime.toString("hh::mm::ss");

    qDebug() << TimeStr;
    qDebug() << Sys;
}

void Widget::timerEvent(QTimerEvent *event)
{
    if (event->timerId() == timerId)
    {
        SysTimeShow();
        QString TimeStr = TimeEdit->text();
        QString Sys = sysTime.toString("hh::mm::ss");
        if (TimeStr == Sys)
        {
            // 播报诗句行编辑器中的内容
            speech->say(PoetryEdit->toPlainText());
        }
    }
}

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

标签:Widget,定时器,QT,sysTime,StartUp,事件驱动,SysTime,new,include
From: https://blog.csdn.net/weixin_64005144/article/details/142109092

相关文章

  • Qt 中实现异步散列器
    【写在前面】在很多工作中,我们需要计算数据或者文件的散列值,例如登录或下载文件。而在Qt中,负责这项工作的类为 QCryptographicHash。关于 QCryptographicHash:QCryptographicHash是Qt框架中提供的一个用于生成加密散列(哈希值)的类。该类可以将任意长度的输入(二进制或文......
  • Qt使用绿色pdf阅读器打开文件
    1.下载SumatraPDF2.设置 3.代码voidMainWindow::on_pushButton_clicked(){QProcess*process=newQProcess();QStringfilePath="C:\\Users\\jude\\Desktop\\su\\11.pdf";QStringsumatraPath="C:\\Users\\jude\\Deskt......
  • 【Qt】事件分发器
    事件分发器概述        在Qt中,事件分发器(EventDispatcher)是⼀个核⼼概念,⽤于处理GUI应⽤程序中的事件。事件分发器负责将事件从⼀个对象传递到另⼀个对象,直到事件被处理或被取消。每个继承⾃QObject类或QObject类本⾝都可以在本类中重写boolevent(QEve......
  • Python Pyqt5 将ui文件转换成py文件
    命令行pyuicyour_ui_file.ui-ooutput_file.py如果是虚拟环境,则需要提前进入虚拟环境中执行pyuic命令uitopy文件的使用如果是ui文件转换过来的py文件,不要直接在此py文件中编写代码。如果你的ui文件发生变换就需要重新生成py文件,这个时候新的py文件就会覆盖历史的。正确使......
  • MQTT是什么?
    1.MQTT是什么?         MQTT协议全称是(MessageQueuingTelemetryTransport),即消息队列遥测传输协议。是一种基于发布/订阅(Publish/Subscribe)模式的轻量级通讯协议,并且该协议构建于TCP/IP协议之上,我们知道TCP协议本身就具有高可靠性的特点,因此基于其上的MQTT协议同样......
  • PyQt GUI开发基础-1
    (目录)一、QFileDialog文件对话框控件方法说明getOpenFileName()获取一个打开文件的文件名getOpenFileNames()获取多个打开文件的文件名getSaveFileName()获取保存的文件名getExistingDirectory()获取一个打开的文件夹setAcceptMode()设置接收模式,取......
  • ubuntu20.04 Qt6引用dcmtk库实现dicom文件读取和字符集转换
    1环境问题安装完Qt6,新建Qt/QtQuickCMake工程编译出现如下错误:Foundpackageconfigurationfile:Qt6Config.cmakebutitsetQt6FOUNDtoFALSEsopackage"Qt6"isconsideredtobeNOTFOUND.原因:这是因为系统中缺少OpenGL库,可以安装libgl1-mesa-dev解决方法:su......
  • QT简易右键菜单示例
    widget.h#ifndefWIDGET_H#defineWIDGET_H#include<QWidget>#include<QMenu>classWidget:publicQWidget{Q_OBJECTpublic:Widget(QWidget*parent=nullptr);~Widget();private:voidcontextMenuEvent(QContextMenuEvent*event)overri......
  • Qt保存文件
      #include<QApplication>#include<QFileDialog>#include<QFile>#include<QTextStream>#include<QMessageBox>voidsaveFileWithDialog(){QStringfileName=QFileDialog::getSaveFileName(nullptr,"保存文件",&q......
  • 一觉醒来,Qt、C#界面开发的天塌了?
    再算上VC、PyQt,之前说“人生苦短,快用python”,现在要说人生苦短,快跳出泥潭!上位机、客户端界面传统开发太重,也不够美。传统开发中,还算不错的毕竟大部分场景,界面并不是核心。大量时间精力投入在交互、美观、还有各种界面类“面向对象的封装”上,实在不划算。有指针调用,搞不好点下界......