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.hqwc.cn/news/610519.html

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

相关文章

Java File类

2. File类 2.1 概述 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。 2.2 构造方法 public File(String pathname) :通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。 public File(String …

【前端】JavaScript(概念+语法+形式+变量+数组+函数+作用域+对象)

文章目录 JavaScript一、JavsScript概念1.JavaScript的开发方向2.JavaScript和CSS、HTML的关系3.JavaScript运行过程4.JavaScript的组成 二、JavaScript的语法1.JS的书写形式1.行内式2.内嵌式3.外部式4.注释5.输入输出1.prompt和alert2.输出: console.log 2.变量的使用1.创建变…

对 FileReader 的理解

1、文档 FileReader - Web API 接口参考 | MDN 2、概念 FileReader 对象是一个内置的 JavaScript 对象,用于在客户端(浏览器)中异步读取文件内容。 它提供了一种在 Web 应用程序中读取文件数据的方式,可以读取文件内容并将其转…

C/C++基础----运算符

算数运算符 运算符 描述 例子 两个数字相加 两个变量a b得到两个变量之和 - 两个数字相减 - * 两个数字相乘 - / 两个数字相除 - % 两个数字相除后取余数 8 % 3 2 -- 一个数字递减 变量a:a-- 、--a 一个数字递增 变量a: a 、 a 其中递…

Java二叉树(2)

一、二叉树的链式存储 二叉树的存储分为顺序存储和链式存储 (本文主要讲解链式存储) 二叉树的链式存储是通过一个一个节点引用起来的,常见的表示方式有二叉三叉 // 孩子表示法 class Node { int val; // 数据域 Node left; // 左孩子的引用…

【VS2019】x64 Native Tools Command Prompt for Vs 2019使用conda命令进入环境

【VS2019】x64 Native Tools Command Prompt for Vs 2019使用conda命令进入环境 安装完VS2019后,打开终端x64 Native Tools Command Prompt for Vs 2019,直接运行conda会出现‘conda’ 不是内部或外部命令,也不是可运行的程序 原因分析&am…

vite 和 rollup

Rollup Rollup 是一个 JavaScript 模块打包器,它可以将多个模块打包成一个单独的文件。 rollup 的特点: 不会生成过多的运行代码 可以多模块化规范打包 input(输入): 这是你的项目的入口点(即主要的 JavaScript 文…

[C++][算法基础]树的重心(树图DFS)

给定一颗树,树中包含 n 个结点(编号 1∼n)和 n−1 条无向边。 请你找到树的重心,并输出将重心删除后,剩余各个连通块中点数的最大值。 重心定义:重心是指树中的一个结点,如果将这个点删除后&a…

考研数学|零基础冲130复习方案+资料分享

如果想考130,那就一定要好好复习基础。 因为24年开始,考研的走向就已经发生了改变,考研数学开始越来越注重一下三点的考察: 基础知识的掌握程度计算能力解题能力 这三点环环相扣,每一个都要复习好才行。 在基础阶段…

Linux操作系统的学习

Linux系统的目录结构 / 是所有目录的顶点目录结构像一颗倒挂的树 Linux常用命令 常见命令 序号命令对应英文作用1lslist查看当前目录下的内容2pwdprint work directory查看当前所在目录3cd [目录名]change directory切换目录4touch [文件名]touch如果文件不存在,新…

《极域多媒体教室互动管理系统软件》控制方法大全

前言及背景: 当我坐在电脑前,打开它,点开谷歌,刚刚想打开百度,突然闪出来了: 该网页已被阻止!!! 正文: 1.极域控制原理: 好…

猝不及防 CCF-B ICPP 2024投稿延期至4月22日提交摘要 机会来了别错过

会议之眼 快讯 第53届ICPP(International Conference on Parallel Processing)即国际并行处理会议将于 2024年 8月12日-15日在瑞典哥特兰岛举行!ICPP是世界上最古老的连续举办的并行计算计算机科学会议之一。它是学术界、工业界和政府的研究…