QT学习day5

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget),socket(new QTcpSocket(this))
{ui->setupUi(this);//初始化界面ui->msgEdit->setEnabled(false);//不可用ui->sendBtn->setEnabled(false);ui->disconnectBtn->setEnabled(false);//如果成功连接到服务器,那么客户端就会自动发射一个connected信号//我们就可以将该信号连接到自定义的槽函数中,由于只要连接一次,所以连接函数写在构造函数中connect(socket,&QTcpSocket::connected,this,&Widget::connected_slot);//如果服务器向客户端发来数据,那么客户端就会自动发送一个readyRead()信号//将该信号连接到自定义的槽函数中,读取数据,由于只需要连接一次,那么连接函数写在构造函数中connect(socket,&QTcpSocket::readyRead,this,&Widget::readyRead_slot);}Widget::~Widget()
{delete ui;
}//连接按钮对应用的槽函数处理
void Widget::on_connectBtn_clicked()
{   //获取到ui界面上的ip和端口号QString ip=ui->ipEdit->text();quint16 port=ui->portEdit->text().toUInt();//客户端连接服务器socket->connectToHost(ip,port);}
//connected对应槽函数
void Widget::connected_slot()
{//告诉服务器 我来了//组织语言userName=ui->userNameEdit->text();QString msg=userName+": 进入聊天室";socket->write(msg.toLocal8Bit());//将数据发送服务器//程序运行至此 意味着服务器和客户端成功建立连接ui->msgEdit->setEnabled(true);ui->sendBtn->setEnabled(true);ui->disconnectBtn->setEnabled(true);ui->userNameEdit->setEnabled(false);ui->ipEdit->setEnabled(false);ui->portEdit->setEnabled(false);ui->connectBtn->setEnabled(false);//如果服务器向客户端发来数据,那么客户端就会自动发送一个readyRead()信号//将该信号连接到自定义的槽函数中,读取数据,由于只需要连接一次,那么连接函数写在构造函数中
}void Widget::readyRead_slot()
{//读取数据QByteArray msg=socket->readAll();//将读取的数据放在ui上ui->listWidget->addItem(QString::fromLocal8Bit(msg));}//f发送按钮对应的槽函数处理
void Widget::on_sendBtn_clicked()
{//获取ui界面上的内容QString msg=ui->msgEdit->text();//组织语言msg=userName+": "+msg;socket->write(msg.toLocal8Bit());
}void Widget::on_disconnectBtn_clicked()
{QString msg=userName+": 退出聊天室";socket->write(msg.toLocal8Bit());//将数据发送服务器socket->disconnectFromHost();//断开连接connect(socket,&QTcpSocket::disconnected,this,&Widget::disconnectBtn_slot);// 收到断开的信号运行disconnectBtn_slot()
}
void Widget::disconnectBtn_slot()
{ui->msgEdit->setEnabled(false);//不可用ui->sendBtn->setEnabled(false);ui->disconnectBtn->setEnabled(false);ui->userNameEdit->setEnabled(true);ui->ipEdit->setEnabled(true);ui->portEdit->setEnabled(true);ui->connectBtn->setEnabled(true);
}

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

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

相关文章

spring启动流程

【spring容器启动】之bean的实例化和初始化(文末附:spring循环依赖原理)_实例化bean和初始化bean-CSDN博客

js中new FormData对象的作用

一、js FormData方法介绍 1. 概述 FormData类型其实是在XMLHttpRequest 2级定义的,它是为序列化表以及创建与表单格式相同的数据(当然是用于XHR传输)提供便利。 2. 构造函数 创建一个formData对象实例有几种方式: 1、创建一个空…

[Kubernetes[K8S]集群:master主节点初始化]:通过Calico和Coredns网络插件方式安装

文章目录 操作流程:前置:Docker和K8S安装版本匹配查看0.1:安装指定docker版本 **[1 — 7] ** [ 配置K8S主从集群前置准备操作 ]一:主节点操作 查看主机域名->编辑域名->域名配置二:安装自动填充,虚拟…

如何借助AI高效完成写作提纲

AI变革力量:未来数据中心的智能化之旅! 在当今这个信息爆炸的时代,人工智能(AI)在众多领域展现出了它的能力,特别是在写作领域。AI写作工具不仅能够帮助我们高效地生成内容,还能在一定程度上提升…

【Sublime详解】mac最好用的编辑器-配置-插件- Alignment-费元星

######################## 先同步下自己用了8年多的配置: mac 打开配置快捷键:command, 逗号 // Settings in here override those in "Default/Preferences.sublime-settings", // and are overridden in turn by syntax-specific setti…

代码随想录算法训练营第三十一天| 455.分发饼干、376.摆动序列、53.最大子序和

系列文章目录 目录 系列文章目录455.分发饼干贪心算法大饼干喂胃口大的(先遍历胃口)胃口大的先吃大饼干(先遍历饼干)小饼干先喂胃口小的(先遍历胃口)胃口小的先吃小饼干(先遍历饼干) 376. 摆动序…

ABR 车路协同场景

#include <iostream> #include <sstream> #include <vector> #include <regex> #include <string> using namespace std; int main() { // 创建一个字符串&#xff0c;用于存储输入 string input; // 从标准输入读取一行 get…

原 Excel 文件中的偶数行替换成对应上下两行的平均值

实现代码 import openpyxl# 打开Excel文件 input_file input.xlsx output_file input3.xlsx wb openpyxl.load_workbook(input_file) output_wb openpyxl.Workbook()# 处理每个工作表 for sheet_name in wb.sheetnames:sheet wb[sheet_name]# 新建一个工作表&#xff0c;…

14-pyspark的DataFrame使用总结

目录 前言DataFrame使用总结 DataFrame的构建方法1&#xff1a;通过列表构建方法2&#xff1a;通过Row对象构建方法3&#xff1a;通过表Schema构建 方法4&#xff1a;rdd结合字符串构建 DataFrame的方法 PySpark实战笔记系列第五篇 10-用PySpark建立第一个Spark RDD(PySpark实战…

CSGO游戏搬砖,落袋为安才是王道

1.市场燃了&#xff0c;都在赚钱&#xff0c;谁在赔钱&#xff1f; 首先要分清“纸面富贵”和“落袋为安”。市场燃了&#xff0c;你库存里的渐变大狙从5000直接涨到了1W&#xff0c;你赚到5000了吗&#xff1f;严格讲&#xff0c;你需要把库存里的渐变大狙卖出去&#xff0c;提…

每天五分钟深度学习:逻辑回归算法的损失函数和代价函数是什么?

本文重点 前面已经学习了逻辑回归的假设函数,训练出模型的关键就是学习出参数w和b,要想学习出这两个参数,此时需要最小化逻辑回归的代价函数才可以训练出w和b。那么本节课我们将学习逻辑回归算法的代价函数是什么? 为什么不能平方差损失函数 线性回归的代价函数我们使用…

2024-基于人工智能的药物设计方法研究-AIDD

AIDD docx 基于人工智能的药物设计方法研究 AI作为一种强大的数据挖掘和分析技术已经涉及新药研发的各个阶段&#xff0c;有望推动创新药物先导分子的筛选、设计和发现&#xff0c;但基于AI的数据驱动式创新药物设计和筛选方法仍存在若干亟待解决的问题。我们课题组的核心研究…

基于达梦数据库开发-python篇

文章目录 前言一、搭建demo前提初始化简单demo 二、可能出现的异常情况DistutilsSetupErrorNo module named dmPythonlist报错 总结 前言 出于信创的考虑&#xff0c;近年来基于国产数据库达梦的应用开发逐渐变多。本文将介绍在windows环境下基于DM8版本的python的简单开发使用…

matlab使用教程(40)—二维傅里叶变换和多项式插值

1使用 FFT 进行多项式插值 使用快速傅里叶变换 (FFT) 来估算用于对一组数据进行插值的三角函数多项式的系数。 1.1数学中的 FFT FFT 算法通常与信号处理应用相关&#xff0c;但也可以在数学领域更广泛地用作快速计算工具。例如&#xff0c;通常通过解算简单的线性系统来计算…

24/04/11总结

IO流(First edition): IO流&#xff1a;用于读入写出文件中的数据 流的方向&#xff08;输入指拿出来,输出指写进去) 输入流:读取 输出流:写出 操作文件类型 字节流:所有类型文件 字符流:纯文本 字节流: InputStream的子类:FileInputStream:操作本地文件的字节输入流 OutputSt…

ssm036基于Java的图书管理系统+jsp

图书管理系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本图书管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处…

数位排序-自定义比较函数

数位排序 4653. 数位排序 - AcWing题库 题目大意&#xff1a;输入两个数&#xff0c;n,m。 将1~n的数&#xff0c;按照以下规则排序&#xff1a; ​ 当两个数各个数位之和不同时&#xff0c;将数位和较小的排在前面&#xff0c;当数位之和相等时&#xff0c;将数值小的排在…

光伏电站运维管理系统功能全面详解

一、系统概述 光伏电站运维管理系统是一款专为光伏电站设计的综合性管理平台。该系统集成了先进的数据监测、故障诊断、运维任务管理、设备信息管理、用户权限管理以及系统维护与升级等功能&#xff0c;旨在提供全面、高效、智能的光伏电站运维服务&#xff0c;确保电站安全、…

java国产化云HIS基层医院系统源码 SaaS模式

目录 ​ 云HIS开发环境 功能模块介绍&#xff1a; 1、门诊模块 2、住院模块 3、药房、药库模块 ​编辑 4、电子病历模块 5、统计报表模块 6、系统管理模块 系统优势 云his之电子病历子系统功能 云 his 系统是运用云计算、大数据、物联网等新兴信息技术&#xff0c;按…

【C++初阶】C++简单入门(长期维护)

本篇博客是对C的一些简单知识分享&#xff0c;有需要借鉴即可。 C简单入门目录 一、C前言1.C的概念&#xff1a;2.C发展历程3.C如何学&#xff1f; 二、C入门1.C关键字(C98标准)2.命名空间3.C输入&输出①概念说明②使用说明③特征说明④细节拓展⑤cout与cin的意义 4.缺省参…