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

Qt事件处理机制

用qt实现简单闹钟

widget.h

#ifndef WIDGET_H
#define WIDGET_H
#include<QPushButton>
#include<QTextEdit>
#include<QLabel>
#include <QWidget>
#include<QMouseEvent>
#include<QPoint>
#include<QTime>
#include<QTimer>
#include<QFont>
#include<QLineEdit>
#include<QTextToSpeech>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT
signals:
    void voice();
public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
public slots:
    void time_slot();
    void btn1_slot();
    void btn2_slot();
    void voice_slot();
private:
    Ui::Widget *ui;
    QLabel *lab1;
    QPushButton *btn1;
    QPushButton *btn2;
    QTextEdit *edit1;
    QLineEdit *ledit;
    QTimer t1;
    QFont font;
    QTextToSpeech *speecher;

};
#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include<QDebug>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    
    ui->setupUi(this);
    lab1=new QLabel(this);
    ledit=new QLineEdit(this);
    btn1=new QPushButton(this);
    btn2=new QPushButton(this);
    edit1=new QTextEdit(this);
    btn2->setEnabled(false);
    speecher= new QTextToSpeech(this);
    QTime systime=QTime::currentTime();
    QString tm=systime.toString("hh:mm:ss");
    this->lab1->setText(tm);
    t1.start(1000);
    connect(&t1,&QTimer::timeout,this,&Widget::time_slot);
    connect(btn1,&QPushButton::clicked,this,&Widget::btn1_slot);
    connect(btn2,&QPushButton::clicked,this,&Widget::btn2_slot);
    connect(this,&Widget::voice,this,&Widget::voice_slot);
}

Widget::~Widget()
{
    delete ui;
}
void Widget::time_slot(){
    lab1->move(80,30);
    lab1->resize(200,50);
    font.setPointSize(20);
    QTime systime=QTime::currentTime();
    QString tm=systime.toString("hh:mm:ss");
    this->lab1->setText(tm);
    lab1->setFont(font);
    lab1->setAlignment(Qt::AlignCenter);
    ledit->move(lab1->width()+lab1->x()+30,30);
    ledit->resize(300,40);
    ledit->setPlaceholderText("请输入xx时xx分xx秒");
    btn1->move(ledit->x(),ledit->y()+ledit->height()+10);
    btn1->setText("开始");
    btn1->resize(80,40);
    btn2->move(btn1->width()+btn1->x()+30,btn1->y());
    btn2->resize(btn1->size());
    btn2->setText(("结束"));
    edit1->move(80,btn1->y()+btn1->height()+10);
    edit1->resize(600,400);
    QString tms=lab1->text();
    QString msg=ledit->text();
    if(tms==msg){
        emit voice();
    }
}
void Widget::voice_slot(){
    QString msg1=edit1->toPlainText();
    speecher->say(msg1.toUtf8());

}
void Widget::btn1_slot(){
    btn1->setEnabled(false);
    edit1->setEnabled(false);
    ledit->setEnabled(false);
    btn2->setEnabled(true);
}
void Widget::btn2_slot(){
    btn1->setEnabled(true);
    edit1->setEnabled(true);
    ledit->setEnabled(true);
     btn2->setEnabled(false);

}


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

相关文章:

  • wandb一直上传 解决方案
  • 大顶堆+动态规划+二分
  • 微信小程序播放音频方法,解决uniapp 微信小程序不能播放本地音频的方法
  • 地震勘探原理视频总结(1-6)
  • K8s 简介以及详细部署步骤
  • python中实用的数组操作技巧i奥,都在这里了
  • 聊点基础的,关于监控,关于告警(prometheus—+grafana+夜莺如何丝滑使用?)
  • Redis的数据类型以及应用场景
  • 4个方法教你图片转PDF怎么弄。
  • redis短信登录模型
  • for循环语句
  • 支持向量机(Support Vector Machines,SVM)—有监督学习方法、非概率模型、判别模型、线性模型、非参数化模型、批量学习、核方法
  • 【STM32 MCU】stm32MCUs 32-bit Arm Cortex-M
  • 关于 openeuler 22.03-LTS-SP4 scp 失败问题的记录
  • c++基础入门二
  • 【RabbitMQ 项目】服务端:数据管理模块之消息队列管理
  • 速盾:高防服务器租用需要注意什么事项
  • FPGA开发:模块 × 实例化
  • postgres_fdw访问存储在外部 PostgreSQL 服务器中的数据
  • 无线麦克风哪款好用,手机领夹麦克风哪个牌子好,麦克风推荐
  • 软件开发详解:同城O2O系统源码的架构设计与外卖跑腿APP的开发要点
  • 在Linux中安装FFmpeg
  • Brave编译指南2024 Windows篇:拉取Brave源码(六)
  • bin | hex
  • OpenCV class1-C#+winfrom显示控件并内存管理
  • 计算机网络 ---- 计算机网络的体系结构【计算机网络的分层结构】
  • uni-app开发安卓应用
  • 150+个流行的Instagram标签(及如何找到并正确使用它们)
  • 半导体芯闻--20240913
  • Ubuntu 22.04 LTS 上安装 Docker