QT事件与网络通信

闹钟 

头文件 

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QTimer>
#include <QTextToSpeech>  // 添加此行以引入QTextToSpeech类QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic: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_NAMESPACEclass weight : public QMainWindow
{Q_OBJECTpublic: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.rhkb.cn/news/447876.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python基础语法条件

注释 注释的作用 通过用自己熟悉的语言&#xff0c;在程序中对某些代码进行标注说明&#xff0c;这就是注释的作用&#xff0c;能够大大增强程序的可读性。 注释的分类及语法 注释分为两类&#xff1a;单行注释 和 多行注释。 单行注释 只能注释一行内容&#xff0c;语法如下…

基于springboot管理系统

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

B3622 枚举子集

1. 注意dfs内&#xff0c;for循环的遍历&#xff0c;想清楚把什么赋值给a[x] 2.本题只需要把0或1赋值给a[x]所以 #include<bits/stdc.h> using namespace std; int n; int a[20]; int vis[20]; void pr() {for (int i 1; i < n; i) {if (a[i] 0)cout << N;els…

Flink On kubernetes

Apache Flink 是一个分布式流处理引擎&#xff0c;它提供了丰富且易用的API来处理有状态的流处理应用&#xff0c;并且在支持容错的前提下&#xff0c;高效、大规模的运行此类应用。通过支持事件时间&#xff08;event-time&#xff09;、计算状态&#xff08;state&#xff09…

网络分析仪——提升网络性能的关键工具

目录 什么是网络分析仪&#xff1f; 1. 实时流量监控 2. 历史数据回溯分析 3. 网络性能关键指标监测 4. 可视化界面与报告生成 总结 在当今的数字化世界&#xff0c;网络的稳定性和性能直接影响企业的运营效率。网络拥堵、延迟和丢包等问题会导致用户体验的下降&#xff…

Linux常用功能整合

Linux Linux 前言一、常用操作以及概念 快捷键求助关机PATHsudo包管理工具发行版VIM 三个模式GNU开源协议 二、磁盘 磁盘接口磁盘的文件名 三、分区 分区表开机检测程序 四、文件系统 分区与文件系统组成文件读取磁盘碎片blockinode目录日志挂载目录配置 五、文件 文件属性文件…

银行卡基础信息查询 API 对接说明

本文将介绍一种 银行卡基础信息查询 API 对接说明&#xff0c;它可用于银行卡基础信息查询。 接下来介绍下 银行卡基础信息查询 API 的对接说明。 申请流程 要使用 API&#xff0c;需要先到 银行卡基础信息查询 API 对应页面申请对应的服务&#xff0c;进入页面之后&#xf…

服务器系统克隆技术

工作任务&#xff1a;克隆对象是Windows server2019 和2022的datacenter版本 条件&#xff1a;在已经完成安装的虚拟机上做克隆 图1-1 用两个服务器的母盘准备进行克隆 第一步&#xff1a;新建一个文件目录用于安放克隆好的服务器 图1-2 创建两个目录用于安放即将克隆好的服务…

Axure科技感元件:打造可视化大屏设计的得力助手

Axure&#xff0c;作为一款专业的原型设计工具&#xff0c;凭借其强大的设计功能、丰富的组件库和灵活的交互能力&#xff0c;成为了许多设计师打造科技感设计的首选工具。其中&#xff0c;Axure科技感元件更是以其独特的魅力和实用性&#xff0c;在数据可视化大屏、登录界面、…

python画图|在三维空间的不同平面上分别绘制不同类型二维图

【1】引言 前序已经完成了基础的二维图和三维图绘制教程探索&#xff0c;可直达的链接包括但不限于&#xff1a; python画图|3D参数化图形输出-CSDN博客 python画三角函数图|小白入门级教程_正余弦函数画图python-CSDN博客 在学习过程中&#xff0c;发现一个案例&#xff1…

【C】分支与循环2--while/for/do-while/goto以及break和continue在不同循环中的辨析~

分支与循环 while循环 if与while的对比 if(表达式)语句&#xff1b;while(表达式)语句&#xff1b;下面来看一个例子&#xff1a; 用 if 写&#xff1a; #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() {if (1)printf("hehe");//if后面条…

Java双亲委派机制讲解和常见问题解决案例示范

1. 引言 Java 的类加载机制是 JVM 运行时系统的核心之一&#xff0c;而其中的双亲委派机制&#xff08;Parent Delegation Model&#xff09;是保证 Java 平台安全性与可扩展性的关键设计。双亲委派机制确保了 Java 体系中类的加载顺序&#xff0c;防止了类的重复加载与覆盖&a…

ARP欺骗的多种手法

学习参考&#xff1a; ARP欺骗的各种d玩法-CSDN博客 https://juejin.cn/post/7383702153892954164 一、什么是ARP欺骗 1.什么是ARP&#xff1f; ARP (Address Resolution Protocol) 是一种网络层协议&#xff0c;用于将 IP 地址转换为物理地址&#xff08;MAC 地址&#xff0…

湖科大-计网真题笔记

09 序列号不涉及首部

前端开发笔记-- 黑马程序员4

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 css 三角写法用户界面鼠标样式取消表单轮廓vertical-align文本溢出 html5 新标签多媒体标签视频标签![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/d85d…

深入解析 HashMap 的 remove() 方法及其相关实现

HashMap 是 Java 中最常用的集合类之一&#xff0c;它提供了高效的键值对存储和检索功能。本文将详细解析 HashMap 的 remove() 方法及其相关的内部实现&#xff0c;包括 removeNode() 和 removeTreeNode() 方法。通过这些方法&#xff0c;我们可以了解 HashMap 如何高效地移除…

中国剩余定理 C++

题目 解题思路 原链接&#xff1a;https://www.acwing.com/solution/content/3539/ 大致步骤&#xff1a; 将第2,3,4…n个方程不断与第一个方程合并&#xff0c;得到方程a1k1a2k2m2-m1;用扩展欧几里得算法解出a1k1a2k2gcd(a1, a2)的结果&#xff0c;再将结果扩大(m2-m1)/d倍即…

Linux:进程控制(三)——进程程序替换

目录 一、概念 二、使用 1.单进程程序替换 2.多进程程序替换 3.exec接口 4.execle 一、概念 背景 当前进程在运行的时候&#xff0c;所执行的代码来自于自己的源文件。使用fork创建子进程后&#xff0c;子进程执行的程序中代码内容和父进程是相同的&#xff0c;如果子进…

12.2 Linux_进程间通信_共享内存

概述 什么是共享内存&#xff1a; 共享内存又叫内存映射&#xff0c;可以通过mmap()映射普通文件。 实际上就是将磁盘中的一个文件映射到内存的一个缓冲区中去&#xff0c;这样进程就可以直接将这块空间当作普通内存来访问&#xff0c;不需要再使用I/O中的read/write去访问这…

CV实战01 YOLOv5实现图像分割

网上翻了一天&#xff0c;没找到称心的教程&#xff0c;最后发现还是Ultralytics官方的教程文档好用&#xff01;这里贴上官方教程一起学习&#xff01; 【1&#xff1a;找到官方教程文档】 yolov5官方下载地址&#xff1a;GitHub - ultralytics/yolov5: YOLOv5 &#x1f680…