4.11Qt

完善网络聊天室客户端实现

工程文件

QT       += core gui    network

头文件

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QTcpSocket>
#include<QMessageBox>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private slots:void on_connect_clicked();void on_send_clicked();void on_cout_clicked();public slots://手动连接的槽函数声明void cslot();void rslot();void outslot();
private:Ui::Widget *ui;//实例化QTcpSocket *socket;QString uname;
};
#endif // WIDGET_H

源文件

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);socket=new QTcpSocket(this);//不可用功能ui->msgl->setEnabled(false);ui->send->setEnabled(false);ui->cout->setEnabled(false);//基于qt5的友好手动连接connect(socket,&QTcpSocket::connected,this,&Widget::cslot);connect(socket,&QTcpSocket::readyRead,this,&Widget::rslot);connect(socket,&QTcpSocket::disconnected,this,&Widget::outslot);}
Widget::~Widget()
{delete ui;
}
//连接按钮
void Widget::on_connect_clicked()
{QString ip=ui->ipl->text();quint16 port=ui->portl->text().toUInt();socket->connectToHost(ip,port);
}
//connected()槽函数
void Widget::cslot()
{QMessageBox::information(this,"","连接服务器成功");uname=ui->namel->text();QString msg=uname+":进入聊天室";socket->write(msg.toLocal8Bit());//可用功能ui->msgl->setEnabled(true);ui->send->setEnabled(true);ui->cout->setEnabled(true);//不可用功能ui->namel->setEnabled(false);ui->ipl->setEnabled(false);ui->portl->setEnabled(false);ui->connect->setEnabled(false);
}//readyRead()信号槽函数
void Widget::rslot()
{QByteArray msg=socket->readAll();ui->list->addItem(QString::fromLocal8Bit(msg));}
//发送按钮
void Widget::on_send_clicked()
{QString msg=uname+": "+ui->msgl->text();socket->write(msg.toLocal8Bit());ui->msgl->clear();
}//断开连接按钮
void Widget::on_cout_clicked()
{QString msg=uname+":离开聊天室";socket->write(msg.toLocal8Bit());socket->disconnectFromHost();
}
//disconnected()槽函数
void Widget::outslot()
{QMessageBox::information(this,"","断开连接");//不可用功能ui->msgl->setEnabled(false);ui->send->setEnabled(false);ui->cout->setEnabled(false);//可用功能ui->namel->setEnabled(true);ui->ipl->setEnabled(true);ui->portl->setEnabled(true);ui->connect->setEnabled(true);
}

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

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

相关文章

Linux 函数学习 poll

1、Linux poll 函数 int poll(struct pollfd *fds, nfds_t nfds, int timeout); fds&#xff1a; 需要轮询的fd集合 nfds&#xff1a;需要轮询的fds数量 timeout&#xff1a;超时时间 返回值&#xff1a;0 超时&#xff0c;<0 发生异常&#xff0c;> 0 存在数据变化 …

ETL中如何运用好MQ消息集成

一、ETL的主要作用 ETL&#xff08;Extract, Transform, Load&#xff09;是数据仓库中的关键环节&#xff0c;其主要作用是将数据从源系统中抽取出来&#xff0c;经过转换和清洗后加载到数据仓库中。具体而言&#xff1a; Extract&#xff08;抽取&#xff09;&#xff1a;从…

JS-28-AJAX

一、AJAX的定义 AJAX不是JavaScript的规范&#xff0c;它只是一个哥们“发明”的缩写&#xff1a;Asynchronous JavaScript and XML&#xff0c;意思就是用JavaScript执行异步网络请求。 如果仔细观察一个Form的提交&#xff0c;你就会发现&#xff0c;一旦用户点击“Submit”…

[BT]BUUCTF刷题第14天(4.10)

第14天&#xff08;共5题&#xff09; Web [BJDCTF2020]ZJCTF&#xff0c;不过如此 打开网站直接显示源代码&#xff1a; <?php error_reporting(0); //关闭报错 $text $_GET["text"]; $file $_GET["file"]; if(isset($text)&&(file…

计算机网络 Telnet远程访问交换机和Console终端连接交换机

一、实验要求和内容 1、配置交换机进入特权模式密文密码为“abcd两位班内学号”&#xff0c;远程登陆密码为“123456” 2、验证PC0通过远程登陆到交换机上&#xff0c;看是否可以进去特权模式 二、实验步骤 1、将一台还没配置的新交换机&#xff0c;利用console线连接设备的…

R语言ggplot2绘图学习笔记(基础知识大全)

R语言ggplot2绘图入门笔记 今天分享的内容是在R语言中利用ggplot2进行可视化的入门笔记&#xff0c;适用于初学者了解ggplot2绘图系统。干货满满&#xff0c;建议收藏&#xff01; 首先安装以下R包&#xff1a; install.packages(c("tidyverse", "colorspace&qu…

Python 全栈体系【四阶】(二十三)

第五章 深度学习 三、计算机视觉基本理论 1. 计算机视觉概览 1.1 什么是计算机视觉 计算机视觉在广义上是和图像相关的技术总称。包括图像的采集获取&#xff0c;图像的压缩编码&#xff0c;图像的存储和传输&#xff0c;图像的合成&#xff0c;三维图像重建&#xff0c;图像…

Java快速入门系列-9(Spring框架与Spring Boot —— 深度探索及实践指南)

第九章:Spring框架与Spring Boot —— 深度探索及实践指南 9.1 Spring框架概述9.2 Spring IoC容器9.3 Spring AOP9.4 Spring MVC9.5 Spring Data JPA/Hibernate9.6 Spring Boot快速入门与核心特性9.7 Spring Boot的自动配置与启动流程详解9.8 创建RESTful服务与数据库交互实践…

学习云计算HCIE选择誉天有什么优势?

誉天云计算课程优势实战性强 课程注重实践操作&#xff0c;通过实际案例和实验操作&#xff0c;让学员深入了解云计算的应用场景和实际操作技能。课程内容全面 涵盖所有云计算涉及的IT基础知识、服务器、存储、网络等方面的基础知识&#xff0c;开源操作系统Linux&#xff0c;开…

12-pyspark的RDD算子注意事项总结

目录 相近算子异同总结相近变换算子异同foreach和foreachPartitionfold和reducecoalesce和repatition 相近动作算子异同cache和persist 算子注意事项需要注意的变换算子需要注意的动作算子 PySpark实战笔记系列第三篇 10-用PySpark建立第一个Spark RDD(PySpark实战笔记系列第…

学习R语言第二天

R语言可以做什么 1.数据分析 R语言如何使用 1. 请看我的操作方式 2. 如何获取当前路径 -- 获取当前路径 > getwd() [1] "E:/R/RWorkSpace/day01" -- 修改当前路径 > setwd(dir "E:/R") > getwd() [1] "E:/R" 3.查看当下数据值的信…

集合系列(十九) -List与数组互转操作介绍

一、数组转List 方式一 通过 Arrays.asList(strArray) 方式&#xff0c;将数组转换List&#xff0c;但不能对List增删&#xff0c;只能查改&#xff0c;否则抛异常&#xff0c;例子如下&#xff1a; public static void main(String[] args) {//创建一个字符串数组String[] …