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

C++,Qt学习 2024.9.10

制作ui界面实现:模拟定时闹钟功能

启动后,lab实时获取系统时间,当系统时间走到设置的时间时,语音播报下方lineEdit中的内容,启动前取消按键不可用,启动后除了取消按键可用其他部分都设为不可用,播报语音开始时重置回开始前的状态  。

.h文件
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QTimer>   //定时器类
#include <QTime>    //时间类
#include <QTimerEvent>  //定时器事件类
#include <QDateTime> //日期时间类
#include <QTextToSpeech>  //语音播报

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

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

private slots:
    void on_pushButton_clicked();

    void timeout_slot();    //自定义处理超时信号槽函数

    void on_pushButton_2_clicked();

private:
    Ui::Widget *ui;

    //定义一个定时器变量
    QTimer t1;
    QTextToSpeech *textToSpeech;  // 添加 QTextToSpeech 对象
};
#endif // WIDGET_H
.cpp文件
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
    , textToSpeech(new QTextToSpeech(this))  // 初始化 QTextToSpeech
{
    ui->setupUi(this);

    //绑定定时器信号与槽
    connect(&t1,&QTimer::timeout,this,&Widget::timeout_slot);

    //将停止按钮初始状态设置为不可用
    ui->pushButton_2->setEnabled(false);
}

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


void Widget::on_pushButton_clicked()
{
    //启动一个计时器
    t1.start(1000);

    //将自己设置为不可用
    ui->pushButton->setEnabled(false);

    //将取消按钮设置为可用
    ui->pushButton_2->setEnabled(true);

    //将两个lineEdit设置为不可用
    ui->lineEdit->setEnabled(false);

    ui->lineEdit_2->setEnabled(false);

}

void Widget::on_pushButton_2_clicked()
{
    //关闭计时器
    t1.stop();

    //将启动按钮设置为可用
    ui->pushButton->setEnabled(true);

    //将自己设置为不可用
    ui->pushButton_2->setEnabled(false);

    //将时间显示label清空
    ui->label->clear();

    //将两个lineEdit设置为可用
    ui->lineEdit->setEnabled(true);

    ui->lineEdit_2->setEnabled(true);
}


//自定义超时函数
void Widget::timeout_slot()
{
    int count=0;
    //获取系统时间
    QTime sysTime=QTime::currentTime();
    //将QTime类对象转变成字符串
    QString tm=sysTime.toString("hh:mm:ss");
    //将时间展示再ui界面上
    ui->label->setText(tm);
    //设置标签居中显示
    ui->label->setAlignment(Qt::AlignHCenter);

    //设置语音播报功能
    if(ui->lineEdit->text()==ui->label->text())
    {
        //当显示的系统时间等于设置时间,语音播报lineEdit2的内容
        textToSpeech->say(ui->lineEdit_2->text());
        count=1;
    }
    if(count==1)
    {
        //关闭计时器
        t1.stop();

        //将启动按钮设置为可用
        ui->pushButton->setEnabled(true);

        //将停止设置为不可用
        ui->pushButton_2->setEnabled(false);

        //将时间显示label清空
        ui->label->clear();

        ui->lineEdit->clear();

        //将两个lineEdit设置为可用
        ui->lineEdit->setEnabled(true);

        ui->lineEdit_2->setEnabled(true);

    }
}


http://www.kler.cn/a/299505.html

相关文章:

  • 【无标题】SAM(Segment Anything Model)
  • 信息过载?企业生存战 一张卡片解决所有痛点
  • iOS——atomic、nonatomic、assign、_unsafe_unretain
  • OpenWRT有三个地方设置DNS,究竟设置哪个地方会更好?
  • 在 Spring MVC 中部署路由为history模式的vue项目
  • 20240910软考架构-------软考141-145答案解析
  • 现在音质最好的开放式耳机是哪一款?盘点市面上比较好的开放式耳机
  • 基于深度学习的自动化产品设计
  • winpe是什么意思_winpe制作详细图文教程
  • 【Unity】AAPT 2-4.2.1-7147631-windows Daemon
  • Linux:epoll 工作模式
  • 【TPAMI 2024】一种用于混合事件-帧摄像机的异步线性滤波器架构
  • Windows一键安装Mysql数据库|非官方复杂安装,解压即可,操作简单
  • Http带消息头两种请求办法
  • 【笔记】数据结构刷题09
  • el-table行编辑
  • 开源 XDR/SIEM 安全平台,附下载链接
  • 【数据结构和算法实践-树-LeetCode105-从前序与中序遍历构造二叉树】
  • 变压器制造5G智能工厂工业物联数字孪生平台,推进制造业数字化转型
  • iPhone照片删不掉?原因探索及解决方案