QT事件与网络通信

news2024/12/23 11:46:15

闹钟 

头文件 

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTimer>
#include <QTextToSpeech>  // 添加此行以引入QTextToSpeech类

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    void timerEvent(QTimerEvent *event) override;

    int eventTimerId;
    int clockTimerId;  

private slots:
    void on_btn1_clicked();
    void timeout_slot();
    void on_btn2_clicked();

private:
    Ui::MainWindow *ui;
    QTimer *objTimer;
    QTextToSpeech *tts;  // 声明QTextToSpeech对象
};

#endif // MAINWINDOW_H

源文件 

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTimer>
#include <QDebug>
#include <QMessageBox>
#include <QTime>
#include <QTimerEvent>
#include <QDateTime>
#include <QTextToSpeech>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    objTimer = new QTimer(this);
    connect(objTimer, &QTimer::timeout, this, &MainWindow::timeout_slot);
    tts = new QTextToSpeech(this);  // 初始化QTextToSpeech
}

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

void MainWindow::timeout_slot()
{
    QTime systime = QTime::currentTime();
    QString t = systime.toString();
}

void MainWindow::on_btn2_clicked()
{
    if (ui->btn2->text() == "启动")
    {
        eventTimerId = this->startTimer(1000);
        ui->btn2->setText("关闭");
    }
    else
    {
        this->killTimer(eventTimerId);
        ui->btn2->setText("启动");
    }
}

void MainWindow::timerEvent(QTimerEvent *event)
{
    if (event->timerId() == eventTimerId)
    {
        QDateTime sysdatatime = QDateTime::currentDateTime();
        QString d = sysdatatime.toString("yyyy-MM-dd  hh:mm:ss");
        ui->label_2->setText(d);
    }

    if (event->timerId() == clockTimerId)
    {
        if (ui->lineEdit->text() == ui->label_2->text())
        {
            QString msg = "现在是北京时间 " + ui->label_2->text() + " 主人,可以起床了";
            tts->say(msg);  // 使用QTextToSpeech播放语音
            this->killTimer(clockTimerId);
            ui->btn1->setEnabled(true);
        }
    }
}

void MainWindow::on_btn1_clicked()
{
    clockTimerId = this->startTimer(1000);  // 每隔1000毫秒,系统会自动调用timerEvent函数
    ui->btn1->setEnabled(false);
}

 客户端

头文件 

#ifndef WEIGHT_H
#define WEIGHT_H
#include<QTcpSocket>
#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui { class weight; }
QT_END_NAMESPACE

class weight : public QMainWindow
{
    Q_OBJECT

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

private slots:
    void on_connectbtn_clicked();
    void connected_slot();
    void readyRead_slot();
    void disconnected_slot();

    void on_sendbtn_clicked();

    void on_releasebtn_clicked();

private:
    Ui::weight *ui;
    QTcpSocket *client;
    QString userName;
};
#endif // WEIGHT_H

源文件 

#include "weight.h"
#include "ui_weight.h"
#include<QMessageBox>
weight::weight(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::weight)
{
    ui->setupUi(this);
    client =new QTcpSocket(this);
    connect(client,&QTcpSocket::connected,this,&weight::connected_slot);
    connect(client,&QTcpSocket::readyRead,this,&weight::readyRead_slot);
    connect(client,&QTcpSocket::disconnected,this,&weight::disconnected_slot);
}

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


void weight::on_connectbtn_clicked()
{
    userName=ui->nameedit->text();
    QString ip=ui->ipedit->text();
    quint16 port=ui->portedit->text().toUInt();
    client->connectToHost(ip,port);
}
void weight::connected_slot()
{
    QMessageBox::information(this,"提示","连接成功");
    QString msg=userName+"进入聊天室";
    client->write(msg.toLocal8Bit());

}

void weight::readyRead_slot()
{
   QByteArray msg=client->readAll();
   ui->listWidget->addItem(QString::fromLocal8Bit(msg));
}


void weight::on_sendbtn_clicked()
{
    QString msg=userName+": "+ui->lineEdit->text();
    client->write(msg.toLocal8Bit());
    ui->lineEdit->clear();
}

void weight::on_releasebtn_clicked()
{
    QString msg=userName+":离开聊天室";
    client->write(msg.toLocal8Bit());
    client->disconnectFromHost();
}
void weight::disconnected_slot()
{
    QMessageBox::information(this,"提示","断开成功");
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2212833.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

通信接入技术

一、xDSL 1、xDSL&#xff1a;利用电话线中的高频信息传输数据&#xff0c;高频信号损耗大&#xff0c;容易受噪声干扰。【速率越高&#xff0c;传输距离越近】 1.1 ADSL虚拟拨号&#xff1a;采用专门的协议PPPover Ethernet&#xff0c;拨号后直接由验证服务器进行检验&#…

免费版视频压缩软件:让视频处理更便捷

现在不少人已经习惯通过视频来记录生活、传播信息和进行娱乐的重要方式。但是由于设备大家现在录制的文件都会比较大&#xff0c;这时候就比较需要一些缩小视频的工具了。今天我们一起来探讨视频压缩软件免费版来为我们带来的生动世界。 1.Foxit视频压缩大师 链接直达&#x…

【论文笔记】Adversarial Diffusion Distillation

Abstract 本文提出了一种新的训练方法&#xff0c;在保持较高图像质量的前提下&#xff0c;仅用1~4步就能有效地对大规模传统图像扩散模型进行采样&#xff0c;使用分数蒸馏(score distillation)&#xff0c;来利用大规模现成的图像扩散模型作为教师信号&#xff0c;并结合对抗…

CVE-2022-26965靶机渗透

​ 开启环境 ​ ​ 进入环境 ​ ​ 使用弱口令admin登录 ​ ​ 利用cms主题构造木马 ​ 需要将主题中的info.php文件修改&#xff0c;再打包成zip再上传&#xff0c;通过网络搜索找到Github中的Pluck CMS&#xff0c;进入后随便下载任一主题 https://github.com/sear…

解锁编程的力量:SPL的学习之旅

SPL 一、前言二、集算器应用场景三、下载四、集算器的基本使用 一、前言 一种面向结构化数据的程序计算语言 集算器又称&#xff1a;SPL&#xff08;Structured Process Language&#xff09; 敏捷计算是集算器的主要特征 二、集算器应用场景 数据准备&#xff08;跑批&…

闭着眼学机器学习——决策树分类

引言&#xff1a; 在正文开始之前&#xff0c;首先给大家介绍一个不错的人工智能学习教程&#xff1a;https://www.captainbed.cn/bbs。其中包含了机器学习、深度学习、强化学习等系列教程&#xff0c;感兴趣的读者可以自行查阅。 1. 算法介绍 决策树是一种常用的机器学习算法…

Linux SSH无密码使用私钥远程登录连接详细配置流程

文章目录 前言1. Linux 生成SSH秘钥对2. 修改SSH服务配置文件3. 客户端秘钥文件设置4. 本地SSH私钥连接测试5. Linux安装Cpolar工具6. 配置SSHTCP公网地址7. 远程SSH私钥连接测试8. 固定SSH公网地址9. 固定SSH地址测试 前言 本文将详细介绍如何将Linux SSH服务与cpolar相结合&…

modbus tcp wireshark抓包

Modbus TCP报文详解与wireshark抓包分析_mbap-CSDN博客 关于wireshark无法分析出modbusTCP报文的事情_wireshark 协议一列怎么没有modbus tcp-CSDN博客 使用Wireshark过滤Modbus功能码 - 技象科技 连接建立以后才能显示Modbus TCP报文 modbus.func_code 未建立连接时&…

论文阅读MOE-DAMEX

目录 Abstract 1. Introduction 3. 传统的MOE 4. 方法 题目&#xff1a;DAMEX: Dataset-aware Mixture-of-Experts for visual understanding of mixture-of-datasets数据集感知的专家混合模型&#xff0c;用于混合数据集的视觉理解 Abstract 通用普通的detector的构建提…

使用HTML、CSS和JavaScript创建图像缩放功能

使用HTML、CSS和JavaScript创建图像缩放功能 在这篇博客文章中&#xff0c;我们将介绍如何使用HTML、CSS和JavaScript创建一个简单的图像缩放功能。这个功能可以增强用户体验&#xff0c;让访问者在点击图像时查看更大的版本。 效果 步骤1&#xff1a;设置HTML结构 首先&…

python异常检测 - 随机离群选择Stochastic Outlier Selection (SOS)

python异常检测 - Stochastic Outlier Selection (SOS) 前言 随机离群选择SOS算法全称stochastic outlier selection algorithm. 该算法的作者是jeroen janssens. SOS算法是一种无监督的异常检测算法. 随机离群选择SOS算法原理 随机离群选择SOS算法的输入: 特征矩阵(featu…

架构设计笔记-14-云原生架构设计理论与实践

知识要点 云原生&#xff08;Cloud Native&#xff09;架构原则&#xff1a; 服务化原则&#xff1a;通过微服务架构&#xff0c;小服务&#xff08;MiniService&#xff09;架构把不同生命周期的模块分离出来&#xff0c;分别进行业务迭代&#xff0c;避免迭代频繁模块被慢速…

10 分钟使用豆包 MarsCode 帮我搭建一套后台管理系统

以下是「 豆包MarsCode 体验官」优秀文章&#xff0c;作者把梦想揉碎。 十分钟使用豆包 MarsCode 搭建后台管理项目 在这个快节奏的时代&#xff0c;开发者们总是希望能够快速、高效地完成项目的搭建与开发工作。无论是初创企业还是大型公司&#xff0c;后台管理系统都是必不可…

Java数组总结

这里写目录标题 一、概念二、几个相关的概念三、数组的特点四、复习:变量按照数据类型的分类五、数组的分类六、一维数组的使用(6个基本点)七、数组元素的默认初始值的情况八、一维数组的内存解析九、二维数组十、数组的常用算法1、数组的最大值、最小值、总和、平均值2、数组的…

翻译难题一扫光!2024年精选4款神器,推荐给每一个需要的你

咱们现在生活在一个信息多得跟潮水一样扑过来的时代&#xff0c;翻译可不只是简单地把一种语言换成另一种语言那么简单了。它更像是连接不同文化和国家的坚固桥梁&#xff0c;也是让知识快速传播的超级加速器。随着科技的飞速发展&#xff0c;翻译工具也迎来了翻天覆地的变化。…

python画图|三维动态柱状图绘制

【1】引言 前序已经学习了二维动态柱状图绘制教程&#xff0c;本次尝试探索三维动态柱状图绘制教程&#xff1a; 【2】项目设计 三维和二维的不同&#xff0c;要在一开始就定义。 二维的定义简单粗暴&#xff0c;只需要一行代码&#xff1a; fig, ax plt.subplots() # 定…

【动手学深度学习】6.6. 卷积神经网络(LeNet)(个人向笔记)

之前我们对Fashion-MNIST数据集的每一张图片进行展平&#xff0c;并用全连接层进行处理。现在我们可以用卷积神经网络来代替它了&#xff01;用卷积层处理可以在图像中保留空间结构&#xff0c;同时模型更简洁&#xff0c;所需参数更少本节将介绍LeNet&#xff0c;它是最早发布…

python学习-怎么在Pycharm写代码

打开Pycharm&#xff0c;点击文件-新建项目 2.选择pure python-点击箭头 展开 3.选择 Existing interpreter 如果 Existing interpreter 下没有相关环境 &#xff08;1&#xff09;点击**…** &#xff08;2&#xff09;选择python的安装路径 4.可修改文件名称-点击创建 …

低功耗4G边缘采集网关——一块电池、一个网关 覆盖90%低功耗场景

低功耗4G边缘采集网关——一块电池、一个网关 覆盖90%低功耗场景 一、简介 历经几个月的研发&#xff0c;DEVELOPLINK 终于推出了低功耗系列采集网关。如果你有低功耗采集的需求, 可以仔细阅读这篇文章&#xff0c;了解一下低功耗系列采集网关的基本情况。 研发的初衷&#…

基于SpringBoot的医院信息管理平台

作者&#xff1a;计算机学长阿伟 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、ElementUI等&#xff0c;“文末源码”。 系统展示 【2024最新】基于JavaSpringBootVueMySQL的医院信息管理平台&#xff0c;前后端分离。 开发语言&#xff1a;Java数据库&#xff1a;MySQ…